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