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

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. Les index B-tree fournissent le plus haut niveau de concurrence sans conditions de blocage.

Index GiST et R-tree

Les verrous partagés/exclusifs de niveau index sont utilisés pour les accès en lecture/écriture. Les verrous sont relâchés à la fin de la commande.

Index hachés

Les verrous partagés/exclusifs au niveau page sont utilisés pour des accès en lecture/écriture. Les verrous sont relâchés après la fin des traitements sur la page. Les verrous au niveau page fournissent une meilleure concurrence que les verrous au niveau index mais sont sensibles aux blocages.

En bref, 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 peuvent évidemment pas être utilisés ; dans cette situation, les développeurs d'applications doivent être conscients des faibles performances de concurrence des index GiST et R-tree.