Upload
eudo-perrot
View
106
Download
0
Embed Size (px)
Citation preview
1
TransactionsTransactionsTransactionsTransactions
Witold LitwinWitold Litwin
2
IntroductionIntroductionIntroductionIntroduction
Beaucoup d'opérations sur une BD doivent Beaucoup d'opérations sur une BD doivent être atomiques:être atomiques:
Transfert d'argent entre les comptes:Transfert d'argent entre les comptes:UPDATE Compte1UPDATE Compte1
Val = Val -100Val = Val -100
UPDATE Compte2UPDATE Compte2
Val = Val + 100Val = Val + 100
Si seulement une de ces requêtes est Si seulement une de ces requêtes est exécutée, la BD perd sa consistanceexécutée, la BD perd sa consistance
3
TransactionsTransactionsTransactionsTransactions
Opérations Opérations aatomiquestomiques inexprimables avec une inexprimables avec une requête relationnelle.requête relationnelle.– entièrement ou pas du toutentièrement ou pas du tout
Préservant la Préservant la cconsistance onsistance de la BDde la BD comme si l'usager était comme si l'usager était iisolé solé sur la BDsur la BD A effet A effet ddurableurable sur la BD, une fois terminées sur la BD, une fois terminées
comme prévucomme prévu
Modèle Modèle ACIDACID de transactions de transactions
4
Primitives de gestion de transactionsPrimitives de gestion de transactionsPrimitives de gestion de transactionsPrimitives de gestion de transactions
BEGIN, COMMIT, ROLLBACKBEGIN, COMMIT, ROLLBACKBEGIN TRANSACTIONBEGIN TRANSACTION
UPDATE Compte1UPDATE Compte1
Val = Val -100Val = Val -100
IF SQLCODE <> 0 ROLLBACK ; EXIT ;IF SQLCODE <> 0 ROLLBACK ; EXIT ;
UPDATE Compte2UPDATE Compte2
Val = Val + 100Val = Val + 100
IF SQLCODE <> 0 ROLLBACK ; EXIT;IF SQLCODE <> 0 ROLLBACK ; EXIT;
COMMITCOMMIT
5
Implémentation de transactionsImplémentation de transactionsImplémentation de transactionsImplémentation de transactions
TID : Identificateur de transactionTID : Identificateur de transaction Inscription dans la BD seulement après le COMMITInscription dans la BD seulement après le COMMIT Journalisation:Journalisation:
– Toute opération d'une transaction est notée avant et après Toute opération d'une transaction est notée avant et après l'exécution dans un fichier l'exécution dans un fichier journaljournal présumé à l'abris de pannes présumé à l'abris de pannes
– Les opérations de commitement sont notées avant d'être Les opérations de commitement sont notées avant d'être exécutées sur la BD exécutées sur la BD (write- ahead log protocol)(write- ahead log protocol)
Points de reprise (checkpoints)Points de reprise (checkpoints)– sauvegardes de l'état de la BD et notamment de TIDs de sauvegardes de l'état de la BD et notamment de TIDs de
transactions en cours à intervalles régulierstransactions en cours à intervalles réguliers
6
Et si la casse arrive...Et si la casse arrive...Et si la casse arrive...Et si la casse arrive...
On ferme l'accès à la baseOn ferme l'accès à la base On reprend le dernier checkpointOn reprend le dernier checkpoint On retrouve sur le journal toutes les On retrouve sur le journal toutes les
transactions transactions commises commises aprèsaprès– commencées avant ou après le checkpointcommencées avant ou après le checkpoint
On reexécute chronologiquement ces On reexécute chronologiquement ces transactionstransactions– et seulement ces transactionset seulement ces transactions
On rouvre la base aux usagersOn rouvre la base aux usagers
7
Transactions non-ACIDTransactions non-ACIDTransactions non-ACIDTransactions non-ACID
Transactions imbriquéesTransactions imbriquées Transactions longuesTransactions longues Transactions distribuéesTransactions distribuées
– exigent un commitement à 2 phases (2 PC)exigent un commitement à 2 phases (2 PC)
8
ConcurrenceConcurrenceConcurrenceConcurrence
Les BDs étant partagées, les transactions Les BDs étant partagées, les transactions pourraient être exécutées:pourraient être exécutées:– l'une après l'autrel'une après l'autre– simultanémentsimultanément
» meilleures performancesmeilleures performances
» possibilités d'inconsistances dans la basepossibilités d'inconsistances dans la base
Théorie de concurrence analyse les Théorie de concurrence analyse les problèmes d'accès simultanéproblèmes d'accès simultané
9
ExempleExempleExempleExemple
A = 100
R1 (A) R2 (A)
A := A +100
W1 (A) A = 200
A := A +200
La base
10
ExempleExempleExempleExemple
A = 100
R1 (A) R2 (A)
A := A +100
W1 (A) A = 200
A := A +200
W2 (A)A = 300
La base
11
Gestion de la concurrenceGestion de la concurrenceGestion de la concurrenceGestion de la concurrence
Verrouillage exclusifVerrouillage exclusif– toute opération d'une transaction T sur une donnée toute opération d'une transaction T sur une donnée
D ne peut fait que si T obtient un D ne peut fait que si T obtient un verrouverrou sur D sur D– si D est déjà verrouillé par T' quand T le demande, si D est déjà verrouillé par T' quand T le demande,
alors T est mis en attentealors T est mis en attente Ce type de verrou est dit Ce type de verrou est dit exclusifexclusif On vient de définir un On vient de définir un protocoleprotocole de gestion de de gestion de
concurrenceconcurrence– Protocole 1Protocole 1
12
ExempleExempleExempleExemple
A = 100
R1 (A)
A := A +100
W1 (A) A = 200
La base
L (A)L (A)
U (A)
13
ExempleExempleExempleExemple
A = 100
R1 (A)
R2 (A)
A := A +100
W1 (A) A = 200
A := A +200
La base
L (A)L (A)
U (A)
A = 400
14
Verrouillage partagéVerrouillage partagéVerrouillage partagéVerrouillage partagé
les lectures ont les les lectures ont les verrous partagésverrous partagés– T et T' peuvent T et T' peuvent lirelire D simultanément D simultanément
les écritures doivent obtenir les les écritures doivent obtenir les verrous exclusifsverrous exclusifs– si D est déjà verrouillé par T', alors T est mis en attentesi D est déjà verrouillé par T', alors T est mis en attente
Avantage:Avantage:– meilleures performances, mais...meilleures performances, mais...
C'est la méthode la plus usitéC'est la méthode la plus usité– Protocole 2Protocole 2
15
ExempleExempleExempleExemple
A = 100R1 (A)
R2 (A)A := A +100
A := A +200
La base
Lr (A)Lr (A)
Lw (A)
16
ExempleExempleExempleExemple
A = 100R1 (A)
R2 (A)A := A +100
A := A +200
La base
Lr (A)Lr (A)
Lw (A)Lw (A)
17
Verrou mortelVerrou mortelVerrou mortelVerrou mortel
Les transactions s'attendent mutuellement Les transactions s'attendent mutuellement (deadlock)(deadlock)
Solution typique:Solution typique:– avorter une de transactions (la avorter une de transactions (la victimevictime))– le choix est fait par le le choix est fait par le gestionnaire des verrousgestionnaire des verrous
(lock manager)(lock manager)
18
ExempleExempleExempleExemple
A = 100R1 (A)
R2 (A)A := A +100
A := A +200
A = 300
La base
Lr (A)Lr (A)
Lw (A)Lw (A)
A
W2 (A)
19
A = 300R1 (A)
A := A +100
A = 400
La base
Lr (A)
Lw (A)
W1 (A)
20
Les exécutions correctesLes exécutions correctesLes exécutions correctesLes exécutions correctes
SérialisabilitéSérialisabilitéLes exécutions concurrentes sont correctes ssi
leur résultat est équivalent à celui d'une exécution sérielle
Le critère naturel et le plus populaireLe critère naturel et le plus populaire– débattu néanmoins pour les systèmes débattu néanmoins pour les systèmes
multibases distribuésmultibases distribués» pourquoi ?pourquoi ?
21
T1
T3x := x+2
x := x*2
x := x/2
x := 10 x := ?
T2
22
T1
T2
T3
T1 T2 T3
T1T2 T3
T1 T2T3
T3 T1 T2
Exécutions sérielles équivalentes
x := x+2
x := x*2
x := x/2
x := 10 x := ?
23
Les verrous / la sérialisabilité Les verrous / la sérialisabilité Les verrous / la sérialisabilité Les verrous / la sérialisabilité
Problème de "fantôme"Problème de "fantôme"– existe pour les deux protocoles: 1 et 2existe pour les deux protocoles: 1 et 2
102030405060
T1R
L[R(1)], S := S + R(1), U[R(1)]L[R(2)], S := S + R(2), U[R(2)]L[R(3)], S := S + R(3), U[R(3)]........L[R(6)], S := S + R(6), U[R(6)]
T2
L[R((3) R(3) := R(3) + 5, U[R(3)]L[R((6) R(6) := R(6) - 5, U[R(6)]
• Le résultat de T1 ? Temps
24
Verrouillage à 2 PhasesVerrouillage à 2 PhasesVerrouillage à 2 PhasesVerrouillage à 2 Phases
1-ère phase : tous les verrouillages2-ème phase : tous les déverouillages
2-ème phase est le +souvent après lecommit (strict 2-PL). Pourquoi ?
Problème:Verrou mortelMal adapté aux transactions longues
les estampilles semblent meilleurs dans ce but
25
L(a)
U(b)
U(a,b)
L(a)
L(b)
U(a)
L(b)
CC
L(a)
U(a,b)
C
L(b)
Schedules 2PLSchedules 2PL
26
L(a)
U(b)
U(a,b)
L(a)
L(b)
U(a)
L(b)
CC
L(a)
U(a,b)
C
L(b)
U(b)
L(a)
L(b)
C
U(a)
27
Problème de "fantôme"Problème de "fantôme"Problème de "fantôme"Problème de "fantôme"
Est-ce que l'exécution discutée est conforme Est-ce que l'exécution discutée est conforme à 2PL ?à 2PL ?
Sinon comment la rendre conforme ?Sinon comment la rendre conforme ? Le résultat, serait-il alors correct ?Le résultat, serait-il alors correct ?
28
Dans les exemples on a verrouillé des tuplesDans les exemples on a verrouillé des tuples Une table peut contenir des millions de Une table peut contenir des millions de
tuplestuples 2-PL peut alors conduire à la gestion de 2-PL peut alors conduire à la gestion de
millions de verrousmillions de verrous Est-ce la solution la plus performante ?Est-ce la solution la plus performante ? Pas toujoursPas toujours
Granularité de verrousGranularité de verrousGranularité de verrousGranularité de verrous
29
Granularité de verrousGranularité de verrousGranularité de verrousGranularité de verrous
attributattribut tupletuple pagepage table définie par un predicattable définie par un predicat table de basetable de base base de donnéesbase de données
– impossible d'inserer/supprimer MAJ un tuple d'une page impossible d'inserer/supprimer MAJ un tuple d'une page ou table ou base vérouilléeou table ou base vérouillée
30
Granularité de verrousGranularité de verrousGranularité de verrousGranularité de verrous
Granularité fine offre + de concurrenceGranularité fine offre + de concurrence Mais aussi plus délicats à gérerMais aussi plus délicats à gérer
– tables de verrous + grandestables de verrous + grandes– + de possibilités de verrou mortel+ de possibilités de verrou mortel
En pratique en général on verrouilleEn pratique en général on verrouille– tuplestuples– pagespages
Elargissement d'un verrou (lock escalation) :Elargissement d'un verrou (lock escalation) :– un verrou fin est remplacé par un verrou moins finun verrou fin est remplacé par un verrou moins fin
– tuple -> tabletuple -> table
31
Niveaux d'isolationNiveaux d'isolationNiveaux d'isolationNiveaux d'isolation
Sérialisabilité totale coûte cherSérialisabilité totale coûte cher N'est pas nécessaires pour toutes transactionsN'est pas nécessaires pour toutes transactions Les SGBD et SQL-3 offrent dès lors différents Les SGBD et SQL-3 offrent dès lors différents
niveaux d'isolation niveaux d'isolation de transactionsde transactions– à utiliser avec des précautionsà utiliser avec des précautions
32
Niveaux d'isolationNiveaux d'isolationNiveaux d'isolationNiveaux d'isolation
LongsW-locksde tuples
LongsR-locks de
tuples
LongsR et W-locksde predicats
R-Uncommitted(dirty reads)
N.A(R-only) N N
R-Committed(cursor stability) O N N
R- Repeatable O O NSerializable O O O
Les locks courts (short-term locks), latches, sont lâchés tout-de-suiteLes locks longs sont maintenus jusqu'à la fin de la transaction
dégréede concurrence
33
Read UncommittedRead UncommittedRead UncommittedRead Uncommitted
exec sql set transaction exec sql set transaction read uncommittedread uncommitted En SQL-3, une telle transaction est par défaut En SQL-3, une telle transaction est par défaut Read OnlyRead Only
– pour prévenir les MAJs perduespour prévenir les MAJs perdues» les Write ne sont possibles que par une transaction de les Write ne sont possibles que par une transaction de
niveau R-Committed au moinsniveau R-Committed au moins» une telle transaction est par défaut Read Write une telle transaction est par défaut Read Write
– sauf une déclaration Read Only dans l'ordre Set sauf une déclaration Read Only dans l'ordre Set TransactionTransaction
fausses valeurs de fonctions agrégat. sont possiblesfausses valeurs de fonctions agrégat. sont possibles valeurs erronées dérivées de celles non-commises peuvent se valeurs erronées dérivées de celles non-commises peuvent se
propager entre les transactions propager entre les transactions
34
Read CommittedRead CommittedRead CommittedRead Committed
exec sql set transaction exec sql set transaction read committedread committed Seules les valeurs commises sont lues Seules les valeurs commises sont lues
– en utilisent R-latches de tuplesen utilisent R-latches de tuples Les écritures utilisent W-locks de tuplesLes écritures utilisent W-locks de tuples Les lectures successives d'une donnée positionnée par le Les lectures successives d'une donnée positionnée par le
curseur lisent toujours une même valeurcurseur lisent toujours une même valeur– d'où le nom d'où le nom cursor stabilitycursor stability
Un retour du curseur sur une donnée dans une même Un retour du curseur sur une donnée dans une même transaction peut par contre lire une valeur différentetransaction peut par contre lire une valeur différente
Il n'y a pas de MAJ perduesIl n'y a pas de MAJ perdues
– sauf si on le veut profondémentsauf si on le veut profondément Le calcul d'une fonction agrégat peut être erronéeLe calcul d'une fonction agrégat peut être erronée
35
Pas de MAJ perduePas de MAJ perduePas de MAJ perduePas de MAJ perdue
branch est la clébranch est la clé Le tuple '123' est verrouillé jusqu'à commitLe tuple '123' est verrouillé jusqu'à commit
exec sql declare cursor d for exec sql declare cursor d for
select bal from acc where branch = '123' for update of bal ;select bal from acc where branch = '123' for update of bal ;
exec sql set transaction exec sql set transaction read committedread committed ; ;
exec sql open d ;exec sql open d ;
exec sql exec sql fetchfetch d into :bal ; d into :bal ;
bal = bal +5 ;bal = bal +5 ; /* lang. source/* lang. source
exec sql set bal = :bal where current of d ;exec sql set bal = :bal where current of d ;
exec sql close d ;exec sql close d ;
exec sql commit work ;exec sql commit work ;
36
MAJ perdue MAJ perdue MAJ perdue MAJ perdue
exec sql set transaction exec sql set transaction read committedread committed ; ;
exec sql select bal into :bal from acc where branch = '123' ;exec sql select bal into :bal from acc where branch = '123' ;
bal = bal +5 ;bal = bal +5 ; /* lang. source/* lang. source
exec sql update acc set bal = :bal where branch = '123' ;exec sql update acc set bal = :bal where branch = '123' ;
exec sql commit work ;exec sql commit work ;
Pourquoi ? Pourquoi ?
37
Read RepeatableRead RepeatableRead RepeatableRead Repeatable
exec sql set transaction exec sql set transaction read repeatableread repeatable
On utilise R-locks et W-locks de tuplesOn utilise R-locks et W-locks de tuples Les lectures d'une donnée peuvent être répétées Les lectures d'une donnée peuvent être répétées
dans une transactiondans une transaction Une fonction agrégat peut-être correctement Une fonction agrégat peut-être correctement
évaluéeévaluée Pas de MAJ perduesPas de MAJ perdues
38
MAJ OKMAJ OKMAJ OKMAJ OK
exec sql set transaction exec sql set transaction read repeatableread repeatable ; ;
exec sql select bal into :bal from acc where branch = '123' ;exec sql select bal into :bal from acc where branch = '123' ;
bal = bal +5 ;bal = bal +5 ; /* lang. source/* lang. source
exec sql update acc set bal = :bal where branch = '123' ;exec sql update acc set bal = :bal where branch = '123' ;
exec sql commit work ;exec sql commit work ;
Pourquoi ? Pourquoi ?
39
Read RepeatableRead Repeatable(problème)(problème)
Read RepeatableRead Repeatable(problème)(problème)
Une insertion durant l'évaluation d'une fonction agrégat Une insertion durant l'évaluation d'une fonction agrégat F F est possibleest possible
– le tuple correspondant n'est pas verrouilléle tuple correspondant n'est pas verrouillé
– une deuxième évaluation de une deuxième évaluation de F dans une même transaction F dans une même transaction peut peut donner un résultat différent donner un résultat différent
Ces exécutions seraient non-sérialisablesCes exécutions seraient non-sérialisables– Pourquoi ?Pourquoi ?
Considère que chaque transaction doit lire un tuple avec Considère que chaque transaction doit lire un tuple avec bal_totbal_tot fait par fait par une autre transaction et signaler si une autre transaction et signaler si bal_totalbal_total n'est pas le résultat de n'est pas le résultat de FF
– alors on pourrait avoir une fausse alerte alors on pourrait avoir une fausse alerte
– Pourquoi ?Pourquoi ?
40
SerializableSerializableSerializableSerializable
exec sql set transaction exec sql set transaction serializableserializable on utilise des on utilise des verrous prédicatifsverrous prédicatifs
» predicate lockpredicate lock
– un tel verrou s'applique à tous les tuples un tel verrou s'applique à tous les tuples concernés par une requêteconcernés par une requête
» même ceux non-existant encoremême ceux non-existant encore
l'anomalie de bal_tot devient impossiblel'anomalie de bal_tot devient impossible– on violerait le verrous prédicatifson violerait le verrous prédicatifs
on obtient la sérialisation dans tous les cason obtient la sérialisation dans tous les cas
41
Predicate locks / Tuple lock Predicate locks / Tuple lock Predicate locks / Tuple lock Predicate locks / Tuple lock
Le predicattuples
verrouillées
42
Predicate locks / Tuple lock Predicate locks / Tuple lock Predicate locks / Tuple lock Predicate locks / Tuple lock
Le predicattuples
verrouillées
43
Predicate locks / Tuple lock Predicate locks / Tuple lock Predicate locks / Tuple lock Predicate locks / Tuple lock
Le verroupredicatif
44
Predicate locks / Tuple lock Predicate locks / Tuple lock Predicate locks / Tuple lock Predicate locks / Tuple lock
Le verroupredicatif
45
SerializableSerializableSerializableSerializable
Les SGBD actuels n'offrent pas de verrous Les SGBD actuels n'offrent pas de verrous prédicatifsprédicatifs– SQL-3 est en avanceSQL-3 est en avance
On peut néanmoins verrouiller toute la tableOn peut néanmoins verrouiller toute la table Le cas d'anomalie citée est fort rare en Le cas d'anomalie citée est fort rare en
pratiquepratique
46
Concurrence sous MsAccessConcurrence sous MsAccessConcurrence sous MsAccessConcurrence sous MsAccess Conçue pour les transactions longues (interactives)Conçue pour les transactions longues (interactives) Trois modes d'accès : positionnement, édit, MAJTrois modes d'accès : positionnement, édit, MAJ
– ces deux dernières sont symb. par le crayonces deux dernières sont symb. par le crayon On utilise des loquets et des verrous (et estampilles)On utilise des loquets et des verrous (et estampilles)
– partagés et exclusifspartagés et exclusifs
Trois granularités Trois granularités – page (n * 2048 octets)page (n * 2048 octets)– tabletable– basebase
NotificationsNotifications– d'une MAJ concurrente faited'une MAJ concurrente faite– d'un verrou en écriture en coursd'un verrou en écriture en cours
Pas d'attentes, mais des relances Pas d'attentes, mais des relances RafraîchissementsRafraîchissements
47
MsAccessMsAccessMsAccessMsAccess Mode pessimiste (Edited Records)Mode pessimiste (Edited Records)
– Le positionnement sur un tuple (la lecture) crée un verrous LLe positionnement sur un tuple (la lecture) crée un verrous Lrr de la de la pagepage
– La demande d'édition signifie une demande d'un verrou LLa demande d'édition signifie une demande d'un verrou Lww sur la sur la pagepage
– obtenu, sauf si un autre Lobtenu, sauf si un autre Lww est en cours est en cours» alors il y a une notification (err. 3260 sous Access B.)alors il y a une notification (err. 3260 sous Access B.)» et, si on veut, jusqu'à 10 re-essais automatiqueset, si on veut, jusqu'à 10 re-essais automatiques
– "Retry Interval" est réglable entre 0 - 1000 msec"Retry Interval" est réglable entre 0 - 1000 msec– défaut = 250 msec (les options multiusager)défaut = 250 msec (les options multiusager)
– si la page a été modifiée depuis Lsi la page a été modifiée depuis Lr r
» il y a une notification (err. 3197 sous Access B.)il y a une notification (err. 3197 sous Access B.)» on peut écraser la MAJ de l'autre, si on veut !on peut écraser la MAJ de l'autre, si on veut !
48
MsAccess : mode optimisteMsAccess : mode optimisteMsAccess : mode optimisteMsAccess : mode optimiste Correspond au choix "No locks" dans les propriétés d'une Correspond au choix "No locks" dans les propriétés d'une
forme ou les optionsforme ou les options L'édition correspond à LL'édition correspond à Lrr seulement seulement
– donc plusieurs usagers peuvent éditer la même page et tupledonc plusieurs usagers peuvent éditer la même page et tuple la page est verrouillée en écriture seulement pour la MAJ la page est verrouillée en écriture seulement pour la MAJ
(durant la "update method"), par un (durant la "update method"), par un loquetloquet Si un conflit alorsSi un conflit alors
– la notification et les re-essais comme pour la méthode pessimiste la notification et les re-essais comme pour la méthode pessimiste (err. 3186 sous Access B.)(err. 3186 sous Access B.)
Si la page a été modifiée depuis LSi la page a été modifiée depuis Lrr par une autre transaction par une autre transaction– alors la notification d'une MAJ concurrentealors la notification d'une MAJ concurrente
49
MsAccess :MsAccess : LLww d'une tabled'une tableMsAccess :MsAccess : LLww d'une tabled'une table
Mode "All records"Mode "All records" A utiliser prudemmentA utiliser prudemment L'accès est L'accès est refusérefusé si une autre transaction a si une autre transaction a
un Lun Lww même sur une page de la table même sur une page de la table– cas fort probable car les insertions ne se font cas fort probable car les insertions ne se font
que dans la que dans la dernièredernière page (Access 2) page (Access 2)
50
Concurrence sous MsAcces Concurrence sous MsAcces Propriétés globales et particularitésPropriétés globales et particularitésConcurrence sous MsAcces Concurrence sous MsAcces Propriétés globales et particularitésPropriétés globales et particularités
Les requêtes ne tiennent pas compte de données non-Les requêtes ne tiennent pas compte de données non-commises (en édition)commises (en édition)
Les requêtes en lecture ne tiiennent pas compte de LLes requêtes en lecture ne tiiennent pas compte de Lww (posés (posés par d'autres transactions)par d'autres transactions)– particularité de MsAccess / SQL standardparticularité de MsAccess / SQL standard
2-PL doit être généré par l'usager2-PL doit être généré par l'usager– en Access Basicen Access Basic
Fantômes peuvent se créer Verrou mortel peut arriverVerrou mortel peut arriver
– mais pas dans les applications simplesmais pas dans les applications simples» l'accès à un tuple à la fois par une forme typiquel'accès à un tuple à la fois par une forme typique
51
Concurrence sous MsAcces Concurrence sous MsAcces Propriétés globales et particularitésPropriétés globales et particularités
Concurrence sous MsAcces Concurrence sous MsAcces Propriétés globales et particularitésPropriétés globales et particularités
Il ya une possibilité de Il ya une possibilité de rafraîchissementrafraîchissement d'une forme ouverte à la d'une forme ouverte à la suite d'une MAJ concurrente suite d'une MAJ concurrente (donc ouvrez l'oeil !)(donc ouvrez l'oeil !)– toutes les 1 : 32 766 sec, défaut 60 sec toutes les 1 : 32 766 sec, défaut 60 sec
» voir les options multiusagervoir les options multiusager Les paramètres de gestion de la concurrence sont ceuxLes paramètres de gestion de la concurrence sont ceux
– par défaut ceux des optionspar défaut ceux des options– sauf si on a déclare un choix différentsauf si on a déclare un choix différent
» dans les propriétés d'une forme ou dans le programme Access Basicdans les propriétés d'une forme ou dans le programme Access Basic L'approche MsAccess mélange au niveau physique les verrous et les L'approche MsAccess mélange au niveau physique les verrous et les
estampilles estampilles – logiques ou peut-être physiques (voir plus loin)logiques ou peut-être physiques (voir plus loin)
Il y a une confusion regrettable de la terminologie de deux approches Il y a une confusion regrettable de la terminologie de deux approches
– les modes "optimiste" et "pessimiste"les modes "optimiste" et "pessimiste"
52
MsAccessMsAccessConcurrence monousagerConcurrence monousager
MsAccessMsAccessConcurrence monousagerConcurrence monousager
Mode pessimisteMode pessimiste– même si l'on choisit "No Locks'"même si l'on choisit "No Locks'"
» donc pas de mode optimiste donc pas de mode optimiste – sans avertissementsans avertissement
Mode exclusif (All Records) possibleMode exclusif (All Records) possible– Aussi bien entre les formes qu'entre les tables et Aussi bien entre les formes qu'entre les tables et
entre les formes et les tablesentre les formes et les tables Les requêtes ne tiennent pas compte de Les requêtes ne tiennent pas compte de
données en éditiondonnées en édition
53
Autres paradigmes pour gérer la Autres paradigmes pour gérer la concurrenceconcurrence
Autres paradigmes pour gérer la Autres paradigmes pour gérer la concurrenceconcurrence
Estampilles (timestamps)Estampilles (timestamps)
– toute transaction est estampillée avec son temps toute transaction est estampillée avec son temps t t de de commencementcommencement
» temps logique ou physiquetemps logique ou physique
– en principe, plus petit en principe, plus petit t t gagne s'il y a un conflitgagne s'il y a un conflit» l'autre transaction est avortée et relancéel'autre transaction est avortée et relancée
– peut-être indéfiniment (peut-être indéfiniment (livelocklivelock)) Avantages/désavantagesAvantages/désavantages
– pas d'interblocage (deadlock)pas d'interblocage (deadlock)
– performances en général moins bonnes que pour le performances en général moins bonnes que pour le verrouillageverrouillage
54
Autres paradigmes pour gérer la Autres paradigmes pour gérer la concurrenceconcurrence
Autres paradigmes pour gérer la Autres paradigmes pour gérer la concurrenceconcurrence
Deux approchesDeux approches
– optimiste (meilleure quand peu d'écritures)optimiste (meilleure quand peu d'écritures)
» vérif. de conflits a posteriori à la fin de la vérif. de conflits a posteriori à la fin de la transactiontransaction
– phase de certificationphase de certification
» si l'exec. incorrecte, alors l'une ou les deux si l'exec. incorrecte, alors l'une ou les deux transactions sont avortéestransactions sont avortées
– pessimistepessimiste
» les conflits sont vérifiés tout de suiteles conflits sont vérifiés tout de suite
» les avortements sont faits aussitôtles avortements sont faits aussitôt
55
2
2(b)
1(a)
1
1(b)
C
5
5(b)
C
...
Sch. Pessimiste
56
2
2(b)
1(a)
1
1(b)
C
5
5(b)
C
...
1(a)
1
1(b)
2
2(b)
...AA
4(a)
4(b)
C
4
7
7(b)
C
...
Sch. Pessimiste Sch. Optimiste
57
Dates de valeurDates de valeurDates de valeurDates de valeur Toute transaction Toute transaction T T est estampillée avec son temps-est estampillée avec son temps-
fin fin VV (date de valeur)(date de valeur) prévu prévu– en principe, le plus petit en principe, le plus petit V V gagne le conflitgagne le conflit
» l'autre transaction l'autre transaction T' T' est avortée et relancée ou est avortée et relancée ou mise en attentemise en attente
– selon le temps de conflit / à selon le temps de conflit / à V'V' Pas de dead-lock (Pas de dead-lock (pourquoi ?)pourquoi ?) Potentiellement + efficace que estampillesPotentiellement + efficace que estampilles
ApplicationsApplications– temps-réel (transactions avec deadlines)temps-réel (transactions avec deadlines)– systèmes multibasessystèmes multibases
» commit implicitecommit implicite
58
6 (a)
V = 6
Dates de valeurDates de valeurDates de valeurDates de valeur
59
V = 8
8 (b)
6 (a)
V = 6
6 (b)A
Dates de valeurDates de valeurDates de valeurDates de valeur
60
V = 8
8 (b)
6 (a)
V = 6
6 (b)
C
V = 16
16 (b)
C
...
Relance
A
Dates de valeurDates de valeurDates de valeurDates de valeur
61
6 (a)
V = 6
Dates de valeurDates de valeurDates de valeurDates de valeur
62
6 (a)
V = 6
6 (b)
V = 13
13 (b)
... W
Dates de valeurDates de valeurDates de valeurDates de valeur
Attente
63
6 (a)
V = 6
6 (b)
V = 13
13 (b)
...C
W
Dates de valeurDates de valeurDates de valeurDates de valeur
C
Attente
64
COMMIT ?COMMIT ?COMMIT ?COMMIT ?