Gestion des accès concurrents

Isolation

La norme SQL2 propose différents mode d'isolation des transactions

Nous allons étudier principalement deux

Le TP est sur le site du CNAM ici -> TP

Deux utilisateurs 1 et 2 peuvent avoir accès à une base de réservation en ligne contenant au moins deux tables Client(id,nom,solde,places) et Vol(id,intitule,capacité,reservations,tarif). Ils peuvent faire des opérations concurrentes de lecture et d'écriture

Pour la concision, on notera R1(V1) l'opération SELECT V1 faite par l'utilisateur 1, et W1(V1) l'opération UPDATE V1 faite par l'utilisateur 1

Soit l'ordonnancement suivant: R1(V1);W1(V1);R2(V1);C1;R2(V1); effectué avec le niveau d'isolation REPEATABLE READ (on verra plus loin ce que c'est)

Essayez !

Qu'observe-t-on ?

  1. L'utilisateur 2 ne voit pas la mise à jour de la base faite par l'utilisateur 1
  2. Même après le COMMIT effectué par l'utilisateur 1, l'utilisateur 2 ne voit pas le changement de la base car il voit la base dans l'état où elle était lorsque sa transaction a débuté, c'est à dire avant le COMMIT (mode REPEATABLE READ)
  3. Pour qu'il voit le changement de la base, il faut qu'il termine son actuelle transaction par un ROLLBACK ou un COMMIT
  4. Faite par exemple C2;
  5. Sélectionner le mode d'isolation READ COMMITED (cette fois-ci la requête accède à l'état de la base au moment où la requête est exécutée) et faire le même ordonnancement. Qu'observez vous ?

Atomicité

Soit l'ordonnancement suivant: R1(V1);W1(V1);RB1; effectué avec le niveau d'isolation REPEATABLE READ

RB1; signifie ROLLBACK; exécuté par l'utilisateur 1

Essayez !

Qu'observe-t-on ?

  1. La transaction 1 constituée de R1(V1);W1(V1);RB1; est rejetée en bloc
  2. On rappelle qu'une transaction est considérée comme insécable un atome

Durabilité

Soit l'ordonnancement suivant: R1(V1);W1(V1);C1;RB1; effectué avec le niveau d'isolation REPEATABLE READ

Essayez !

Qu'observe-t-on ?

  1. Le COMMIT effectué par l'utilisateur 1 valide la séquence R1(V1);W1(V1) et on ne peut plus revenir dessus avec un ROLLBACK

Niveaux d'isolation

Le niveau d'isolation REPEATABLE READ est le niveau d'isolation par défaut

Soit l'ordonnancement suivant: R1(V1);R1(C1);R2(V1);R2(C2);W1(V1);W1(C1);C1;W2(V1);W2(C2);C2

Effectué avec le niveau d'isolation REPEATABLE READ

Qu'observe-t-on ?

  1. L'utilisateur 1 a sélectionné 2 places pour Serge (C1) sur le vol V1 puis l'utilisateur 2 a sélectionné 5 places pour Philippe (C2) sur le vol V1, puis l'utilisateur 1 a mis à jour la base et a fait un COMMIT, puis l'utilisateur 2 a mis à jour la base et a fait un COMMIT
  2. On observe une anomalie dans la base au lieu d'avoir 7 réservations il n'y en a que 5 les 5 dernières !
  3. Le niveau REPEATABLE READ est un niveau PARTIEL d'Isolation

Le niveau d'isolation SERIALIZABLE est le niveau d'isolation total

Soit l'ordonnancement suivant: R1(V1);R1(C1);R2(V1);R2(C2);W1(V1);W2(V1);

Effectué avec le niveau d'isolation SERIALIZABLE

Qu'observe-t-on ?

La transaction 1 attend la transaction 2 qui attend la transaction 1 (INTERBLOCAGE)