12.5. Verrouillage et index
Bien que PostgreSQL™ fournisse
des accès non bloquant 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 :
-
Index B-tree et GiST
-
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.
-
Index hachés
-
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 blocages car les verrous sont détenus plus longtemps que
pour une opération sur un index.
-
Index GIN
-
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.