Algorithmes et Bases de Données, année 2019
Isolation et Durabilité
Non ce n’est pas un cours sur comment réaliser des travaux dans une maison
Petit retour sur les niveaux d’isolations dans PostgresSQL
Nous avons vu les différents niveaux d’isolations proposés par le standard SQL. PostgreSQL implante trois niveaux d’isolations différents:
- READ COMMITED
- REPEATED READ
- SERIALIZED
Nous allons voir sur des exemples simples comment ceux ci peuvent modifier les résultats de deux requêtes concurrentes.
La requête suivante, crée une table et la peuple avec des données synthétiques:
CREATE TABLE a (id SERIAL, classe INT, value INT);
INSERT INTO a (classe, value) SELECT floor(random()*2), floor(random()*100) FROM generate_series(1, 5);
SELECT * FROM a;
Donne:
id | classe | value |
---|---|---|
1 | 1 | 55 |
2 | 0 | 14 |
3 | 1 | 25 |
4 | 0 | 64 |
5 | 0 | 97 |
(5 lignes)
Vérous
Même en mode COMMITED READ des vérous peuvent exister à la modification de ligne:
Si un premier processus réalise la transaction suivante:
Et un secon réalise la transaction suivante:
Les deux transactions vont être bloqué ce qui est détecter par
PostgreSQL qui va retourner une erreur
ERREUR: Bloquage mortel détecté
et tué la transaction qui
a entraîner l’interblocage en dernier.
Absence d’isolation
Il est possible de noté l’absence d’isolation en réalisant uniquement des lecture dans une transaction et une écriture dans une autre.
En réalisant de manière concurrente
Compiled the: mer. 08 janv. 2025 11:51:34 CET