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:

  1. READ COMMITED
  2. REPEATED READ
  3. 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:

BEGIN;
UPDATE a SET value=-2 WHERE id=1;
UPDATE a SET value=-2 WHERE id=2;

Et un secon réalise la transaction suivante:

BEGIN;
UPDATE a SET value=-1 WHERE id=2;
UPDATE a SET value=-1 WHERE id=1;

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: dim. 07 janv. 2024 23:19:23 CET