Transcript Document

Préambule
Systèmes de gestion de bases de données
NFP 107
Les techniques du contrôle de
concurrence
Philippe Rigaux
[email protected]
http://idf.pleiad.net/index.php
Vertigo
NFP 107
1
Préambule
Contenu du cours
• Techniques de versionnement
▫ Que se passe-t-il quand plusieurs transactions
travaillent sur les mêmes données
• Techniques de verrouillage
▫ Les différents types de verrous, et leur impact
• Algorithme de sérialisabilité
▫ Algorithme de verrouillage à deux phases
▫ Algorithme de contrôle multiversions
Vertigo
NFP 107
2
Préambule
Versionnement
• Toute transaction en cours a deux choix en
permanence:
▫ Valider les maj effectuées avec commit
▫ Les annuler avec rollback
temps
T’ lit e
Image
avant
eavant
Image
après
eavant
après
On remplace
On
peutaprès
effacer
image
l’image
avant
(sûr?)
par image
avant
T modifie eavant en eaprès
T valide
annule(commit)?
(rollback)?
T lit e
Vertigo
NFP 107
3
Préambule
Quelques questions (et réponses)
• Comment une transaction sait-elle si elle doit
lire dans l’image avant ou après
▫ En mode READ UNCOMMITTED: on lit toujours
dans l’image après (lecture sale)!
▫ Autres modes: si e est en cours de modification par
T, T’ lit dans l’image avant.
• Peut-on avoir plusieurs versions en cours de
modification dans l’image avant?
▫ Non! Si T’ veut modifier e (en cours de modification
par T) -> T’ en attente (pas d’écriture sale).
• Quand efface-t-on l’image avant?
▫ Dépend du mode ….
Vertigo
NFP 107
4
Préambule
Estampillage et cohérence
• Pour assurer la cohérence, on doit associer une
estampille temporelle à chaque version.
▫ C’est l’estampille qui permet de gérer la
cohérence des lectures
▫ L’estampille est le moment du dernier commit
• Chaque transaction a aussi une estampille
NON,
en mode
READ et SERIALIZABLE
Et s’il existe
uneREPEATABLE
transaction estampillée
8?
T18’’8’ lit
Alorsen
il faut
plusieurs
versions
lit ee
T
lit e
OUI,
mode
READ
(UN)COMMITTED
18’ garder
Image
avant
e6avant
Image
après
temps
e14avant
14
e
e30
avant
après
après
Peut-on effacer
l’image
avant?
On
estampille
la nouvelle version de e
T23 modifie eavant en eaprès
T23 valide à t=30
T23 lit e
Vertigo
NFP 107
5
Préambule
Versionnement: conclusion
• Notions essentielles: image avant, image après
• Il ne peut y avoir qu’une image après (pas
d’écritures concurrentes)
• On peut préserver plusieurs images avant
• Lectures cohérentes => travail complexe et
coûteux. Exemple, pour T’’8
▫ Lire dans l’image après -> la donnée est en cours
de modification.
▫ Puis lire dans l’image avant -> elle est estampillée
14, donc pas bon
▫ Remonter encore d’un cran -> on trouve e6, OK
Vertigo
NFP 107
6
Préambule
Verrouillage
• Le contrôle de cohérence implique la pose de
verrous sur les données lues ou écrites.
• Verrous partagés (VP): plusieurs VP peuvent
être posés simultanément sur une même
donnée par plusieurs transactions.
• Verrous exclusifs (VE): si un seul VE est posé
sur une donnée, c’est le seul verrou.
• Le choix du type de verrou à poser pour chaque
opération dépend du mode d’isolation
Vertigo
NFP 107
7
Préambule
Pose d’un verrou partagé
• Une transaction T veut poser un verrou partagé
sur une donnée d
▫ T doit s’assurer qu’un verrou exclusif n’est pas
posé sur d.
▫ Si c’est le cas (pas de VE), le verrou peut être
posé, quel que soit par ailleurs l’existence
d’autres VP sur d.
▫ Sinon (un VE existe), T est mis en attente.
• Très important: quand T est mise en attente,
cela concerne toutes les opérations de d.
Vertigo
NFP 107
8
Préambule
Pose d’un verrou exclusif
• Une transaction T veut poser un verrou exclusif
sur une donnée d
▫ T doit s’assurer qu’aucun verrou n’est posé sur d,
quel que soit son type (VE ou VP)
▫ Si c’est le cas (pas de verrou), le VE peut être
posé.
▫ Sinon (un verrou existe), T est mis en attente.
• Même remarque: quand T est mise en attente,
cela concerne toutes les opérations.
Vertigo
NFP 107
9
Préambule
Exemples
• On considère deux transactions, T1 et T2, et
deux données x et y.
• T1 veut poser un VP sur x?
• T2 veut poser un VE sur y?
• T1 veut poser un VP sur y?
• T1 en attente
• T2 veut poser un VP sur x?
T1
T1
xx
yy
Vertigo
VP
VP
T2
T2
VP
VE en attente
NFP 107
VE
10
Préambule
Caractérisation des exécutions non
sérialisables
• Pour savoir quand et comment poser des
verrous, on va caractériser les exécutions non
sérialisables.
• Conflit: deux opérations pi[x] et qj[y] sont en
conflit si x = y, i != j, et p ou q est une écriture.
▫
▫
▫
▫
r1[x] et r2[x] sont-elles en conflit?
r1[x] et w2[x] sont-elles en conflit?
r1[x] et w2[y] sont-elles en conflit?
r1[x] et w1[x] sont-elles en conflit?
Vertigo
NFP 107
11
Préambule
Relation entre les transactions
d’une exécution concurrente
• Soit H une exécution concurrente comprenant
plusieurs transactions T1, T2, …, Tn
• On définit la relation < sur cet ensemble par:
T1 < T2 ssi il existe une opération p de T1, q de
T2 telles que
p et q sont en conflit
p apparaît avant q dans l’exécution H.
Vertigo
NFP 107
12
Préambule
Exemple
• Exécution de deux procédures Réservation()
▫ r1[s]r1[c1] r2[s] r2[c2] w2[s]w2[c2] w1[s]w1[c1]
▫ Exemple des mises à jour perdues!
• Les conflits
▫ r1[s] est en conflit avec w2[s]
▫ r2[s] est en conflit avec w1[s]
▫ w2[s] est en conflit avec w1[s]
• Donc on a T1 < T2 et T2 < T1
• Le graphe de < est cyclique.
Vertigo
NFP 107
13
Préambule
Théorème de sérialisabilité
• Th: une exécution concurrente est sérialisable
ssi le graphe de < est acyclique.
• L’exemple précédent correspond à une
exécution non sérialisable.
• Le contrôle de concurrence (en mode
SERIALIZABLE) consiste à s’assurer qu’aucun
cycle n’apparaît dans une exécution
concurrente.
• Plusieurs algorithmes. Le plus ancien:
algorithme de verrouillage à deux phases (2PL)
Vertigo
NFP 107
14
Préambule
Algorithme de verrouillage à deux
phases
• Le protocole est assuré par un scheduler
• Il se décrit très simplement:
▫ Un verrou partagé est posé sur les lectures
▫ Un verrou exclusif est posé sur les écritures
▫ Les verrous ne sont pas relâchés avant le commit
ou le rollback.
• C’est un protocole dit « pessimiste » qui vise à
prévenir les conflits
• Il est facile de voir que lectures sales et écritures
sales sont impossibles.
Vertigo
NFP 107
15
Préambule
Exemple de 2PL
• Soit l’exécution suivante:
r1[x]w2[x]w2[y]C2w1[y]C1
• Non sérialisable (pourquoi?)
• Algorithme 2PL:
• T1 pose un verrou partagé sur x, et lit x
• T2 tente de poser un verrou exclusif sur x et est mise
en attente
• T1 pose un verrou exclusif sur y, modifie y, et valide
• T2 est libérée : elle pose un verrou exclusif sur x
• T2 verrouille et modifie y, puis valide.
• Finalement:
r1[x] w1[y]C1w2[x]w2[y]C2
Vertigo
NFP 107
16
Préambule
Interblocages (deadlocks)
• Inconvénient du 2PL: risque élevé
d’interblocage.
• Exemple des mises à jour perdues:
r1[s]r1[c1] r2[s] r2[c2] w2[s]w2[c2] w1[s]w1[c1]
T1 même
poseposer
un
VPun
sur
c1,
etlits:
litsVP
c1 surens attente!
s,sur
etdes
T2
chose:
pose
et c2
veut
VE
mise
ss
c1
c1
c1
c2
c2
c2
Vertigo
VP
T1
T1
T2
T2
VP (attente
VP VE)
VP (attente
(attente
VE)
VP
VP VE)
VP
VP
NFP 107
VP
VP
17
Préambule
Conclusion
• Ce qu’il faut retenir
▫ Les SGBD utilisent un système de versionnement
qui permet de préserver l’état de la base sur une
durée très longue -> coût important
▫ Il ne peut y avoir qu’une version (la dernière) en
cours de mise à jour
▫ Pour assurer la propriété précédente, les écritures
posent toujours un verrou exclusif
▫ Les lectures ne posent pas de verrou en général
Vertigo
NFP 107
18