4. Les composants de l'architecture d'un système de bases de données
127
et c, cela signifie qu'une gestion correcte de l'obtention et de la levée
des verrous permet l'exécution simultanée des transactions TRX_1 et
TRX_2 sans violer les contraintes d'intégrité.
Transactions
comptables non
conflictuelles grâce
aux verrous
La figure 4-9 confirme notre certitude que les transactions
concurrentes TRX_1 et TRX_2 s'exécutent sans interférer entre elles
grâce au placement des LOCKs et UNLOCKs conformément aux règles
du protocole de verrouillage à deux phases. Ainsi par exemple, la
transaction TRX_2 est la première à verrouiller le compte b qui ne sera
libéré que dans sa phase de relâchement. TRX_1, qui a aussi besoin de
verrouiller le compte b, doit donc attendre la levée des verrous.
Aussitôt que TRX_2 exécute un UNLOCK(b), le compte b est rendu
disponible à TRX_1. À ce moment-là, la transaction TRX_1 lit la
valeur «correcte» de b, soit b+200. C'est ainsi que les transactions
concurrentes TRX_1 et TRX_2 s'exécutent en parfaite synchronisation.
Figure 4-9
Transactions
comptables non
conflictuelles
Un léger
retardement est
accepté
Le protocole de verrouillage à deux phases retarde sans doute
certaines opérations de TRX_1, mais cet inconvénient est le prix à
payer pour qu'à la fin des deux transactions, les contraintes d'intégrité
Temps
BEGIN_OF_TRX_1
LOCK(a)
READ(a)
a:=a+100
WRITE(a)
LOCK(b)
READ(b)
UNLOCK(a)
b:=b-100
WRITE(b)
UNLOCK(b)
END_OF_TRX_1
BEGIN_OF_TRX_2
LOCK(b)
READ(b)
b:=b+200
WRITE(b)
LOCK(c)
READ(c)
c:=c-200
WRITE(c)
UNLOCK(c)
END_OF_TRX_2
UNLOCK(b)
LOG(b)
TRX_2: READ
TRX_2: WRITE
TRX_1: READ
TRX_1: WRITE
Précédent

- 142/301

Suivant