Chapitre 12. Contrôle d'accès simultané

Table des matières
12.1. Introduction
12.2. Isolation des transactions
12.2.1. Niveau d'isolation Read committed (lecture des seules données validées)
12.2.2. Niveau d'isolation sérialisable
12.3. Verrouillage explicite
12.3.1. Verrous de niveau table
12.3.2. Verrous au niveau ligne
12.3.3. Verrous morts (blocage)
12.4. Vérification de cohérence des données au niveau de l'application
12.5. Verrouillage et index

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.

12.1. Introduction

Contrairement aux systèmes de bases de données traditionnelles qui utilisent des verrous pour le contrôle de concurrence, PostgreSQL maintient la consistance des données à l'aide d'un modèle multi-versions (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 de 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 base de données.

Le principal avantage de l'utilisation du modèle MVCC pour le contrôle de concurrence, 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 de tables ou de 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.