Ce chapitre décrit le comportement du système de bases de données
PostgreSQL™ lorsque deux
sessions, ou plus, essaient d'accéder aux mêmes données au même
moment. Le but dans cette situation est de permettre un accès
efficace pour toutes les sessions tout en maintenant une intégrité
stricte des données. Chaque développeur d'applications utilisant des
bases de données devrait être familier avec les thèmes couverts dans
ce chapitre.
PostgreSQL™ fournit un
ensemble riche d'outils pour les développeurs qui gèrent des accès
parallèles aux données. En interne, la cohérence des données est
atteinte avec l'utilisation d'un modèle multiversion (Multiversion
Concurrency Control, MVCC). Ceci
signifie que, lors d'une requête à la base de données, chaque
transaction voit une image des données (une version de la base de données) telle qu'elles
étaient quelque temps auparavant, quelque soit l'état actuel des
données sous-jacentes. Ceci protège la transaction des données
incohérentes, causées par les mises à jour effectuées par une
(autre) transaction concurrente sur les mêmes lignes de données,
fournissant ainsi une isolation des
transactions pour chaque session de la base de données.
MVCC, en évitant les méthodes de
verrous explicites des systèmes de bases de données traditionnels,
minimise la conservation des verrous pour permettre des
performances raisonnables dans des environnements
multiutilisateurs.
Le principal avantage de l'utilisation du modèle MVCC pour le contrôle des accès simultanés,
contrairement au verrouillage, est que, dans les verrous acquis par
MVCC pour récupérer (en lecture)
des données, aucun conflit n'intervient avec les verrous acquis
pour écrire des données. Du coup, lire ne bloque jamais l'écriture
et écrire ne bloque jamais la lecture.
Les capacités de verrouillage des tables ou des lignes sont aussi
disponibles dans PostgreSQL™
pour les applications ne pouvant pas s'adapter facilement au
comportement de MVCC. Néanmoins,
un bon usage de MVCC fournira
généralement de meilleures performances que les verrous. De plus,
les verrous informatifs définis par l'utilisateur fournissent un
mécanisme d'acquisition de verrous qui n'est pas lié à une
transaction.