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)

Soit l'exécution concurrente de deux transactions TR1 et TR2 visant à ajouter chacune une entrée au film '123' :

Transaction parallèles TR1 et TR2 sous PostgreSQL

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.

De combien les entrées du film 123 ont-t-elles été augmentées à t3 du point de vue de la transaction TR1 ?

De combien les entrées du film 123 ont-t-elles été augmentées à t3 du point de vue de la transaction TR2 ?

De combien les entrées du film 123 ont-t-elles été augmentées à t5 du point de vue de la transaction TR1 ?

De combien les entrées du film 123 ont-t-elles été augmentées à t5 du point de vue de la transaction TR2 ?

De combien les entrées du film 123 ont-t-elles été augmentées à t7 du point de vue de la transaction TR1 ?

De combien les entrées du film 123 ont-t-elles été augmentées à t7 du point de vue de la transaction TR2 ?

1

TR1 est en cours, de son point de vue isolé les entrées ont été augmentées de 1.

0

TR1 n'est pas validé à t3, les modifications ne sont pas encore visibles en dehors de la transaction.

1

  • 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.

0

TR1 est en cours d’exécution, et TR2 bloquée, donc t.a n'a pas été augmenté de son point de vue.

1

Le commit débloque TR2 qui exécute son update, mais celui-ci n'est toujours pas visible depuis TR1.

2

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.

AccueilExercices > Exercice : Films en concurrence< PrécédentSuivant >