Post on 03-Apr-2015
transcript
Contrôle de la concurrence
Cours de Bases de Données
Inge2-Info, IFIPS, Orasy
2006-07
Tao-Yuan JEN - tao-yuan.jen@u-cergy.fr
Problématique
Exemple : virement bancaire
Update compte set total=total -100where compte.id = '0001'
Update compte set total=total +100where compte.id = '0002'
Update compte set total=total -100where compte.id = '0001'
Update compte set total=total +100where compte.id = '0002'
Perdu !
Problématique
Exemple : virement bancaire
Update compte set total=total -100where compte.id = '0001'
Update compte set total=total +100where compte.id = '0002'
Unité entière UnUnité un
Unité entière
ACIDA : Atomicité tous exécuté ou non exécuté
C : Cohérence
transformation séquentielle d’un état cohérent à un autre
I : Isolation
pas d’influence d’autres
D : Durabilité
si valider, alors persister
Transactions
Actions:
Lecture (read) : RT(O)
Ecriture (write) : WT(O)
Validations ( commit) : CommitT
Annulation (abort) : AbortT
Exécution concurrente :
partage de ressources sérialisation
Sérialisation
L'effet d'une exécution concurrente d'un ensemble de transactions est égale à une exécution séquentielle de cet ensemble de transaction sous un certain ordre
Exemple
T1 : R(A) W(A) W(C) commit
T2 : R(B) W(B) commit
Anomalies et conflits
Deux action sont conflictuelles si au moins une est l'écriture.
Anomalies connues et leur conflit :
Lecture non validée conflit WRLecture non reproductibles conflit RWPerte d'opération conflit WW
Lecture non validée (1)
T1 : R(A) W(A) abort
T2 : R(A) W(A) ......
La transaction T2 a lu une valeur de A qui n'est jamais existé
Lecture non validée (2)
T1 : R(A) W(A) R(B) W(B) commit
T2 : R(A) W(A) R(B) W(B) commit
Exemple :
T1 : A -> B 1000 eurosT2 : A= A*(1+2%), B= B*(1+2%)
L'exécution rend la base de données incohérente
Lecture non reproductible
T1 : R(A) R(A) ....
T2 : R(A) W(A) commit
La transaction T1 peut se trouver lire deux valeurs distinctes de A sans avoir modifié A(pas de I dans ACID)
Perte d'opération
T1 : R(A) W(A) commit
T2 : R(A) W(A) commit
La transaction T1 supprimer l'effet de T2.
Exemple :
A= 5;T1 : A = A+1;T2 : A = A -1;
Annulation impossible
T1 : R(A) W(A) abort
T2 : R(A) W(A) commit
Sérialisation garantit les transformations entre des états cohérents si les transactions sont validées.
Sinon, il faut éliminer tous effets produits par la transaction annulée.
Exemple :
A= 5;T1 : A = A+1;T2 : A = A+1;
Sérialisable conflituellement
S est sérialisable conflictuellement si les actions conflictuelles des S sont exécutéesdans le même ordre que les actions conflictuelles dans une exécution en série.
T1 : R(A) commit
T3 : W(A) commit
T2 : W(A) commit
T1 : R(A) W(A) commit
T3 : W(A) commit
T2 : W(A) commit
(a) Sérialisable conflictuellement
(b) Sérialisable mais pas sérialisable conflictuellement
Graphe des conflits (1)
- un noeud pour chaque transaction
- un arc de Ti à Tj s'il existe une action a de Ti qui précède une action b de Tj telles que a et b sont conflictuelles.
Une exécution concurrente S est sérialisable conflictuellementssi
le graphe de conflits de S est acyclique
Graphe des conflits (2)T1 : R(A) commit
T3 : W(A) commit
T2 : W(A) commit
T1 : R(A) W(A) commit
T3 : W(A) commit
T2 : W(A) commit
T1 T2
T3
T1 T2
T3
(a) Sérialisable conflictuellement
(b) Sérialisable mais pas sérialisable conflictuellement
Verrouillages
Verrou partageable (en lecture) : LR(A)
- Un verrou en lecture sur A doit être obtenu par T avant une lecture de A par T
Verrou exclusif (en écriture) : LW(A)
- Un verrou en écriture sur A doit être obtenu par T avant une écriture de A par T
Verrouillage en 2 phases
è- LW(O) précède W(O) LR(O) ou LW(O) précèdent R(O)
- Tous les verrou doivent être libérés avant la fin de la transactionou dans son annulation.
- 2PL : Aucune demande de verrouillage ne pet succéder à une libération de verrou.
Sérialisation et 2PL
2PL garantit le graphe des conflits est acyclique
Protocole :une action n’est exécutée que si elle n’est pas conflictuelleavec une action déjà exécutée d’autre transaction active
W(B) W(C) commit W(A) commit W(D) W(B) commit
Entrée :
W(B) W(C) commit W(A) commit W(D) W(B) commit
Sortie :
Lecture non validée et 2PL
T1 : R(A) W(A) R(B) W(B) commit
T2 : R(A) W(A) R(B) W(B) commit
T1 T2
T1 : R(A) W(A) R(B) W(B) commit
T2 : R(A) W(A) R(B) W(B) commit
T1 T2
Sortie :
Entrée :
Lecture non reprodctible et 2PL
T1 : R(A) R(A) commit
T2 : R(A) W(A) commitT1 T2
Entrée :
Sortie :
T1 : R(A) R(A) commit
T2 : R(A) W(A) commitT1 T2
Verrouillage en 2 phases strict
- LW(O) précède W(O) LR(O) ou LW(O) précèdent R(O)
- Tous les verrou doivent être libérés avant la fin de la transactionou dans son annulation.
- Strict 2PL : Tous les verrous d’une transaction sont libérés uniquement à la fin de la transaction
Annulation possible avec Strict 2PL
Strict 2PL garantit la possibilité d’annulation
T1 : R(A) W(A) abort
T2 : R(A) W(A) commit
Entrée :
Sortie :
T1 : R(A) W(A) abort
T2 : R(A) W(A) commit
2PL et interblocage
T1 : W(A) W(B) W(C) commit
T2 : W(B) W(A) commit
Entrée :
Sortie :
T1 : LW(A) W(A) LW(B)
T2 : LW(B) W(B) LW(A) ….
Gestion des interblocages (1)
Détection : Graphe des attentes
Prévention :Ti demande un verrou conflictuel avec Tj
Wait-Die : Si Ti plus de priorité, alors Ti attendsinon annule Ti
Wound-wait : Si Ti plus de priorité, alors annule Tj sinon Ti attend
Gestion des interblocages (2)
Graphe des attentes :
Si interblocages, alors cyclique
T1 : LR(A), R(A), LR(B) T2 : LW(B), W(B) LW(C)T3 : LR(C), R(C) LW(A)T4 : LW(B)
T1 T2
T4 T3
Gestion des interblocages (3)
Détection V.S. Prévention
Fréquence de détection
Choix des transaction bloquantes à annuler
Problème des fantômes
Ajouter ou supprimer une objet Donc, blocage un ensemble d’objets
T1 : LireMax(A) SupprimerMax(B)
T2 : LireMax(B) AjouterMax(A)
Niveaux d'isolations
Lecture non validée
Lecture validée
Lecture reproductible
Sérialisation
Par défaut : sérialisation et lecture-écriture
Lecture non validée
Lecture validée
Lecture reproductible
Sérialisable
Performance et niveaux d'isolation