TD4
Transcription
TD4
TD d’ABD no 4 : transaction 5 février 2016 Objectifs : — identifier le niveau d’isolation le plus faible nécessaire pour obtenir un résultat cohérent — analyser l’effet du niveau d’isolation sur l’exécution de plusieurs requêtes SQL Exercice 1 On considère la table Person(name,age) et la transaction suivante : Begin Transaction; Q1: Select Avg(age) From Person; <read-only activity> Q2: Select Avg(age) From Person; Commit; On suppose que les requêtes Q1 et Q2 s’exécutent atomiquement. On considère les scénarios suivants pour toutes les autres transactions du système : — Toutes les autres transactions sont déclarées en tant que SERIALIZABLE et READ ONLY. — Toutes les autres transactions sont déclarées en tant que SERIALIZABLE et elles comprennent seulement des requêtes de sélection et des mises à jour. — Toutes les autres transactions sont déclarées en tant que SERIALIZABLE et on ne sait rien d’autre sur elles. Quel est le niveau d’isolation le plus faible nécessaire pour garantir que les requêtes Q1 et Q2 renvoient toujours le même résultat ? Pourquoi ? Exercice 2 On considère la table R(A) contenant 8 et 5. Soit les deux transactions suivantes : T1: Update R set A = A+1; T2: Update R set A = 2*A; On suppose que les deux transactions respectent la propriété d’isolation et d’atomicité. Quels sont les états finaux possibles pour la table R ? Exercice 3 Suppossons qu’un client exécute séquentiellement deux transactions : T1 puis T2. En concurrence, un second client exécute séquentiellement deux transactions : T3 puis T4. Chaque transaction termine correctement. Combien existe t-il d’exécutions séquentielles pour ces quatre transactions ? Exercice 4 On considère la table Worker(name,pay) où name est une clé et les deux transactions concurrentes suivantes : — T1 : Begin Transaction S1: update Worker set pay = 2*pay where name = ’Amy’ S2: update Worker set pay = 3*pay where name = ’Amy’ Commit — T2 : Begin Transaction S3: update Worker set pay = pay-20 where name = ’Amy’ S4: update Worker set pay = pay-10 where name = ’Amy’ Commit 1 On suppose que chaque instruction S1, S2, S3 et S4 s’exécute atomiquement, que l’attribut pay vaut 40 pour Amy avant que les transactions ne démarrent et que les deux transactions s’exécutent avec le niveau d’isolation sérialisable. Quelles sont les valeurs finales possibles de l’attribut pay pour Amy ? Exercice 5 On considère les tables R(A) et S(B) contenant chacune les valeurs 8 et 9. On suppose que les deux transactions suivantes : — T1 : Begin Transaction update R set A = 2*A update S set B = 2*B Commit — T2 : Begin Transaction select avg(A) from R select avg(B) from S Commit Chaque instruction s’exécute atomiquement. Les deux transactions s’exécutent avec le niveau d’isolation READ COMMITTED et terminent correctement. Quelles sont les valeurs finales possibles que la transaction T2 peut renvoyer ? Exercice 6 On considère la table R(x) ne contenant que des entiers. Alice exécute la transaction suivante : select sum(x) from R; commit; Betty exécute la transaction suivante : insert into R values (10); insert into R values (20); insert into R values (40); commit; Carol exécute la transaction suivante : delete from R where x=40; delete from R where x=20; commit; Avant que ces transactions ne s’exécutent, la somme des entiers dans R est 700 et aucun de ces entiers n’est 10, 20 ou 40. Les trois transactions s’exécutent avec le niveau d’isolation READ COMMITTED et terminent correctement. Quelles sont les valeurs finales possibles renvoyées par la requête d’Alice ? Exercice 7 On considère deux tables R(A,B) et S(C) et les deux transactions suivantes : — transaction 1 : Set Transaction Isolation Level Read Committed; Select count(*) From R; Select count(*) From S; Commit; — transaction 2 : Set Transaction Isolation Level Serializable; Insert Into R Values (1,2); Insert Into S Values (3); Commit; On suppose que chaque instruction s’exécute atomiquement et que chaque transaction termine correctement. 2 Est-il possible d’exhiber un comportement non-sérialisable lors de l’exécution concurrente de ces transactions tout en respectant leur niveau d’isolation ? Exercice 8 On considère deux tables R(A,B) et S(C) et les deux transactions suivantes : — transaction 1 : Set Transaction Isolation Level Read Committed; Select count(*) From R; Select count(*) From S; Commit; — transaction 2 : Set Transaction Isolation Level Serializable; Insert Into R Values (1,2); Insert Into R Values (3,4); Commit; On suppose que chaque instruction s’exécute atomiquement et que chaque transaction termine correctement. Est-il possible d’exhiber un comportement non-sérialisable lors de l’exécution concurrente de ces transactions tout en respectant leur niveau d’isolation ? Exercice 9 On considère la table Worker(name,pay) où name est une clé et les deux transactions concurrentes suivantes : — T1 : Begin Transaction S1: update Worker set pay = 2*pay where name = ’Amy’ S2: update Worker set pay = 3*pay where name = ’Amy’ Commit — T2 : Begin Transaction S3: update Worker set pay = pay-20 where name = ’Amy’ S4: update Worker set pay = pay-10 where name = ’Amy’ Commit Chaque instruction S1, S2, S3 et S4 s’exécute atomiquement. L’attribut pay vaut 40 pour Amy avant que les transactions ne démarrent. Les deux transactions s’exécutent avec le niveau d’isolation READ UNCOMMITTED et terminent correctement. Quelles sont les valeurs finales possibles de l’attribut pay pour Amy ? Exercice 10 On considère la table Worker(name,pay) où name est une clé et les deux transactions concurrentes suivantes : — T1 : Begin Transaction S1: update Worker set pay = 2*pay where name = ’Amy’ S2: update Worker set pay = 3*pay where name = ’Amy’ Commit — T2 : Begin Transaction S3: update Worker set pay = pay-20 where name = ’Amy’ S4: update Worker set pay = pay-10 where name = ’Amy’ Commit Chaque instruction S1, S2, S3 et S4 s’exécute atomiquement. L’attribut pay vaut 70 pour Amy avant que les transactions ne démarrent. La transaction T1 s’exécute avec le niveau d’isolation READ COMMITTED et la transaction T2 s’exécute avec le niveau d’isolation READ UNCOMMITTED. Les deux transactions terminent correctement. Quelles sont les valeurs finales possibles de l’attribut pay pour Amy ? 3 Exercice 11 Soit la table Notation avec le contenu suivant : id 1 2 3 formation ’Informatique’ ’Informatique’ ’Mathématiques’ note 12 11 10 promotion 2001 2002 2002 Supposons que les deux transactions suivantes sont exécutées en concurrence avec le niveau d’isolation Read-Uncommitted et qu’elles terminent correctement. — T1 : Begin Transaction S1: UPDATE Notation SET note = note + 1 WHERE promotion = 2001 S2: UPDATE Notation SET note = note + 2 WHERE promotion = 2002 Commit — T2 : Begin Transaction S3: SELECT AVG(note) FROM Notation WHERE formation = ’Informatique’ S4: SELECT AVG(note) FROM Notation WHERE formation = ’Mathématiques’ Commit Quelles sont les différentes valeurs possibles retournées par la transaction T2 ? Exercice 12 Soit la table Notation avec le contenu suivant : id 1 2 3 formation ’Informatique’ ’Informatique’ ’Mathématiques’ note 12 11 10 promotion 2001 2002 2002 Supposons que les deux transactions suivantes sont exécutées en concurrence avec le niveau d’isolation Read-Uncommitted et qu’elles terminent correctement. — T1 : Begin Transaction S1: INSERT INTO Notation VALUES (4, ’Mathématiques’, 9, 2002); S2: DELETE FROM Notation WHERE id = 2; Commit — T2 : Begin Transaction S3: SELECT AVG(note) FROM Notation WHERE formation = ’Informatique’; S4: SELECT AVG(note) FROM Notation WHERE formation = ’Mathématiques’; Commit Quelles sont les différentes valeurs possibles retournées par la transaction T2 ? 4