Films en concurrence
Soit la table Film suivante définie en relationnel permettant d'enregistrer le nombre d'entrées des films identifiés par leur ISAN.
Film(#isan:char(33),entrees:integer)
Film(#isan:char(33),entrees:integer)
Soit l'exécution concurrente de deux transactions TR1 et TR2 visant à ajouter chacune une entrée au film '123' :
Temps | Transaction TR1 | Transaction TR2 |
---|---|---|
t0 | BEGIN | |
t1 | BEGIN | |
t2 | UPDATE Film SET entrees=entrees+1 WHERE isan='123' | |
t3 | ||
t4 | UPDATE Film SET entrees=entrees+1 WHERE isan='123' | |
t5 | ||
t6 | COMMIT | |
t7 | ||
t8 | COMMIT |
NB :
Les instructions sont reportées au moment où elles sont transmises au serveur
Aucune autre transaction n'est en cours d'exécution entre t0 et t8.
Exercice
De combien les entrées du film 123 ont-t-elles été augmentées à t3 du point de vue de la transaction TR1 ?
TR1 est en cours, de son point de vue isolé les entrées ont été augmentées de 1.
Exercice
De combien les entrées du film 123 ont-t-elles été augmentées à t3 du point de vue de la transaction TR2 ?
TR1 n'est pas validé à t3, les modifications ne sont pas encore visibles en dehors de la transaction.
Exercice
De combien les entrées du film 123 ont-t-elles été augmentées à t5 du point de vue de la transaction TR1 ?
TR1 obtient un verrou X à t2 et exécute son UPDATE.
TR2 est mise en attente avant son UPDATE à t4, car elle ne peut obtenir de verrou X déjà posé par TR1.
À t5 TR1 est toujours en cours d’exécution, et TR2 toujours bloquée, donc les entrées ont été augmentées de 1 pour le moment.
Exercice
De combien les entrées du film 123 ont-t-elles été augmentées à t5 du point de vue de la transaction TR2 ?
TR1 est en cours d’exécution, et TR2 bloquée, donc t.a
n'a pas été augmenté de son point de vue.
Exercice
De combien les entrées du film 123 ont-t-elles été augmentées à t7 du point de vue de la transaction TR1 ?
Le commit
débloque TR2 qui exécute son update
, mais celui-ci n'est toujours pas visible depuis TR1.
Exercice
De combien les entrées du film 123 ont-t-elles été augmentées à t7 du point de vue de la transaction TR2 ?
TR2 a pu exécuter son update
à t6 dès que TR1 a libéré le verrou avec son commit
. TR1 est validé, donc la modification est visible, et du point de vue de TR2, la modification en cours de TR2 est également visible.