Documentation PostgreSQL 8.4.22 > Langage SQL > Contrôle d'accès simultané > Verrouillage et index | |
Vérification de cohérence des données au niveau de l'application | Conseils sur les performances |
Bien que PostgreSQL™ fournisse des accès non bloquants en lecture/écriture aux données de la table, un accès non bloquant en lecture/écriture n'est pas fourni pour chaque méthode d'accès aux index implémentée dans PostgreSQL™. Les différents types d'index sont gérés ainsi :
Les verrous partagés/exclusifs de court terme au niveau page sont utilisés pour les accès en lecture/écriture. Les verrous sont immédiatement relâchés après le parcours ou l'insertion de chaque ligne d'index. Ces types d'index fournissent le plus haut niveau de concurrence sans conditions de blocage.
Les verrous partagés/exclusifs au niveau hash-bucket sont utilisés pour des accès en lecture/écriture. Les verrous sont relâchés après la fin des traitements sur le bucket. Les verrous au niveau bucket fournissent un meilleur accès concurrent que les verrous au niveau index mais sont sensibles aux interblocages car les verrous sont détenus plus longtemps que pour une opération sur un index.
Les verrous partagés/exclusifs à court terme et de niveau page sont utilisés pour les accès en lecture/écriture. Les verrous sont relâchés immédiatement après chaque récupération ou insertion de ligne d'index. Mais notez que l'insertion d'une valeur indexée par GIN produit habituellement plusieurs de clés d'index par ligne, donc GIN peut faire un travail substantiel pour l'insertion d'une simple valeur.
Actuellement, les index B-tree offrent la meilleure performance pour les applications concurrentes ; comme ils ont aussi plus de fonctionnalités que les index hachés, ils constituent le type d'index recommandé pour les applications concurrentes nécessitant des index sur des données scalaires. Pour les données non scalaires, les index B-trees ne sont pas utiles et les index GIN et GiST devraient être utilisés à leur place.