Fonctionnement d`un SGBD La concurrence

Transcription

Fonctionnement d`un SGBD La concurrence
Master MIAGE 1
Université de Nice Sophia-Antipolis
Fonctionnement d’un SGBD
TD 4 (2 séances)
La concurrence
I. Application directe du cours magistral
EXERCICE 1 : Déterminez si les séquences suivantes peuvent produire des anomalies. Les symboles ci et ai indiquent le résultat (commit ou abort) de la transaction.
1.
2.
3.
4.
5.
6.
7.
8.
r1 (x),
r1 (x),
r1 (x),
r1 (x),
r1 (x),
r1 (x),
r1 (x),
r1 (x),
r1 (y), w1 (x), w1 (y), c1 , c2
r2 (z), w1 (x), w2 (z), c1 , c2
w1 (x), r2 (x), w2 (y), a1 , c2
w1 (x), r2 (y), w2 (y), a1 , c2
r2 (x), r2 (y), w2 (y), r1 (z), a1 , c2
r2 (x), w2 (x), w1 (x), c1 , c2
r2 (x), w2 (x), r1 (x), c1 , c2
w1 (x), r2 (y), w2 (x), c1 , c2
EXERCICE 2 : Parmi les séquences suivantes, lesquelles sont vue-sérialisables?
Donnez toutes les sérialisations valides.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
w0 (x), r2 (x), r1 (x), w2 (x), w2 (z)
w0 (x), r1 (x), r2 (x), w2 (x), w2 (z)
w0 (x), r1 (x), w1 (x), r2 (x), w1 (z)
w0 (x), r1 (x), w1 (x), w1 (z), r2 (x)
r1 (x), r2 (x), w2 (x), w1 (x)
r1 (x), r2 (x), w2 (x), r1 (x)
r1 (x), r1 (y), r2 (z), r2 (y), w2 (y), w2 (z), r1 (z)
r0 (x), r0 (y), w0 (x), r1 (y), r1 (x), w1 (y), r2 (x), r2 (y), r2 (z), w2 (z)
r1 (x), r2 (y), w1 (y), r2 (x), w2 (x)
r1 (x), r2 (y), w1 (x), w1 (y), r2 (x), w2 (x)
r1 (x), r1 (y), r2 (y), w2 (z), w1 (z), w3 (z), w3 (x)
r1 (y), r1 (y), w2 (z), w1 (z), w3 (z), w3 (x), w1 (x)
EXERCICE 3 :
Parmi les séquences suivantes, lesquelles sont conflit-sérialisables? Donnez toutes les sérialisations valides. Et vue-sérialisables? Donnez toutes
les sérialisations valides.
1. r1 (x), r2 (x), w2 (x), w1 (x)
2. r1 (x), r2 (x), w2 (x), r1 (x)
3. r1 (x), r1 (y), r2 (z), r2 (y), w2 (y), w2 (z), r1 (z)
Pierre Crescenzo inspiré par Isabelle Mirbel
page 1 sur 5
Master MIAGE 1
Université de Nice Sophia-Antipolis
4. r1 (x), w1 (x), r2 (z), r1 (y), w1 (y), r2 (x), w2 (x), w2 (z)
5. r1 (x), w1 (x), w3 (x), r2 (y), r3 (y), w3 (y), w1 (y), r2 (x)
6. r1 (x), r2 (x), w2 (x), r3 (x), r4 (z), w1 (x), w3 (y), w3 (x), w1 (y), w5 (x), w1 (z),
w5 (y), r5 (z)
7. r1 (x), r3 (y), w1 (y), w4 (x), w1 (t), w5 (x), r2 (z), r3 (z), w2 (z), w5 (z), r4 (t), r5 (t)
8. r1 (x), r2 (x), w2 (x), r3 (x), r4 (z), w1 (x), r3 (y), r3 (x), w1 (y), w5 (x), w1 (z), r5 (y),
r5 (z)
9. r1 (x), r4 (x), w4 (x), r1 (y), r4 (z), w4 (z), w3 (y), w3 (z), w1 (t), w2 (z), w2 (t)
EXERCICE 4 : Si les séquences de l’exercice 3 sont présentées à un ordonnanceur 2PL, quelles transactions sont mises en attente, dans quel ordre (nous ne nous
intéressons qu’à la première attente de chaque transaction)?
EXERCICE 5 : Considérons un contrôle de la concurrence basé sur la technique
TS pour un objet x. Initialement, W T M(x) = 5 et RT M(x) = 7. Indiquez les
actions de l’ordonnanceur en réponse aux entrées suivantes.
r(x,8), r(x,17), w(x,16), w(x,18), w(x,23), w(x,29), r(x,20), r(x,30), r(x,25)
EXERCICE 6 :
Même question que dans l’exercice 4 mais avec la technique TS.
II. Compléments du cours magistral
EXERCICE 1 : Reprenez l’exemple de ligne fantôme donné dans le cours magistral et montrez que l’utilisation de la technique 2PL résout le problème de cet
exemple.
EXERCICE 2 : La taxonomie des différentes classes de séquence étudiées (VSR,
CSR, 2PL et TS) a été vue en cours magistral. Nous nous proposons ici d’étudier
plus en détail cette taxonomie.
1. Montrez par un exemple qu’il existe des séquences qui peuvent être en TS mais
pas en 2PL (l’indice des transactions sera considéré comme leur étiquette).
Montrez que la séquence exemple trouvée appartient à CSR et VSR.
2. Montrez par un exemple qu’il existe des séquences qui sont à la fois en TS et
en 2PL. Montrez que la séquence exemple trouvée appartient à CSR et VSR.
III. Mise en pratique sous Oracle (inspirée par Richard Grin et
Isabelle Mirbel)
EXERCICE 1 : Mise en route pour les accès concurrents
1. Ouvrez deux sessions avec le même identifiant.
2. Faites des modifications (mais pas de create ou de drop) dans la session 1.
Voyez si les modifications sont connues de la session 2.
Pierre Crescenzo inspiré par Isabelle Mirbel
page 2 sur 5
Master MIAGE 1
Université de Nice Sophia-Antipolis
3. Faites un commit dans la session 1. Voyez si les modifications sont connues de
la session 2.
4. Modifiez le salaire d’un même employé dans la session 1 puis dans la session
2 (avec des valeurs différentes). Voyez quelles modifications sont connues dans
les deux sessions.
5. Faites un commit dans la session 1. Voyez quelles modifications sont connues
dans les deux sessions.
6. Faites un commit dans la session 2. Voyez quelles modifications sont connues
dans les deux sessions.
7. Utilisez un select for update dans la session 1 puis essayez de modifier les lignes
bloquées avec l’autre session.
8. Est-ce qu’un blocage d’une table en mode exclusif bloque les lectures sur cette
table pour les autres transactions?
EXERCICE 2 :
Mode de fonctionnement par défaut d’Oracle
En travaillant sur la table des employés vérifiez que dans ce mode. . .
1. les lectures ne bloquent ni les autres lectures ni les écritures.
2. les lectures ne sont bloquées par rien, même pas par un blocage d’une table en
mode exclusif.
3. il n’y pas de lecture impropre.
4. il n’y a pas de perte de mise à jour.
5. il peut y avoir des lectures non reproductibles.
6. il peut y avoir des lignes fantômes.
EXERCICE 3 : Empêcher les lectures non reproductibles
Que pouvez-vous faire pour empêcher les lectures non reproductibles. . .
1. dans le cas où la transaction ne modifie aucune donnée.
2. dans le cas où elle modifie des données.
Donnez plusieurs solutions si possible.
EXERCICE 4 :
Empêcher les lignes fantômes
Mêmes questions que l’exercice 3, mais pour les lignes fantômes.
EXERCICE 5 : Interblocages
1. Provoquez un interblocage en faisant des modifications dans une session, puis
en bloquant des tables dans l’autre session. Voyez comment Oracle réagit.
2. Provoquez un blocage en lançant un update (que vous ne validez pas tout de
suite) dans une session puis un blocage en mode share dans l’autre session.
Voyez comment Oracle réagit.
Pierre Crescenzo inspiré par Isabelle Mirbel
page 3 sur 5
Master MIAGE 1
EXERCICE 6 :
Université de Nice Sophia-Antipolis
Transaction en read only
1. Ouvrez une nouvelle transaction en read only.
2. Ouvrez en parallèle une seconde transaction dans laquelle vous modifiez des
salaires.
3. Validez cette seconde transaction. Voyez-vous les modifications dans la première transaction?
4. Essayez de modifier des données dans la première transaction.
5. Que se serait-il passé si la première transaction n’avait pas été en read only?
Vérifiez votre hypothèse après avoir terminé la première transaction.
EXERCICE 7 : Mode sérialisable
Faites cet exercice en expliquant ce qui va se passer avant de lancer chaque
commande.
1.
2.
3.
4.
5.
6.
7.
8.
9.
Ouvrez deux sessions.
Dans la session 1, passez en mode sérialisé.
Dans la session 1, affichez le nom et le salaire de tous les employés.
Dans la session 2, modifiez le salaire d’un employé (que vous choisissez, nous
l’appellerons Toto).
Dans la session 1, affichez le nom et le salaire de tous les employés. Quel est
le salaire de Toto? Pourquoi?
Dans la session 2, validez la transaction.
Dans la session 1, affichez le nom et le salaire de tous les employés. Quel est
le salaire de Toto? Pourquoi?
Dans la session 1, modifiez le salaire de Toto. Que se passe-t-il? Pourquoi?
Dans la session 1, modifiez le salaire d’un autre employé que Toto. Que se
passe-t-il? Pourquoi?
Voyez-vous une différence avec le mode par défaut d’Oracle? Expliquez?
EXERCICE 8 : Comportement optimiste ou pessimiste
Dans cet exercice vous allez simuler un comportement optimiste d’un programme
pour la modification des données dans la table des employés. La modification consistera à augmenter le salaire d’un des employés.
1. Pour cela, faites d’abord afficher le salaire de l’employé (puisque vous êtes
optimiste, vous ne bloquez pas ce salaire lors de sa lecture). Calculez à la
main une augmentation de 10 % (on simule ainsi le calcul complexe et long
du nouveau salaire) et enregistrez le nouveau salaire. Qu’allez-vous faire pour
vous prémunir contre une modification de ce salaire par une autre transaction
entre la lecture du salaire et l’enregistrement du nouveau salaire dans la base
de données? Il n’y pas de variable pour ranger les valeurs lues. . .
Pierre Crescenzo inspiré par Isabelle Mirbel
page 4 sur 5
Master MIAGE 1
Université de Nice Sophia-Antipolis
2. Même exercice mais, cette fois-ci, modifiez la table dept pour y ajouter une
colonne qui est incrémentée à chaque modification de la ligne correspondant
à l’employé augmenté, et utilisez cette colonne pour savoir si les données ont
été modifiées entre la lecture des données et la fin de la transaction.
3. Faites les mêmes traitements en étant pessimiste.
Pierre Crescenzo inspiré par Isabelle Mirbel
page 5 sur 5

Documents pareils