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