Gestion des transactions PowerPoint PPT Presentation

presentation player overlay
1 / 46
About This Presentation
Transcript and Presenter's Notes

Title: Gestion des transactions


1
Gestion des transactions
2
  • Transaction
  • UnitĂ© de traitement sĂ©quentiel constituĂ©e d'une
    suite d'instructions manipulant une BD et
    préservant sa cohérence.

3
Tolérance aux pannes
  • PĂ©rennitĂ© des donnĂ©es
  • Maintien de la cohĂ©rence
  • RĂ©sistance Ă  tous types de panneTransfert de
    fonds
  • CREATE OR UPDATE PROCEDURE transfert(A number, B
    number, V float) IS
  • UPDATE COMPTE SET montant montant V WHERE
  • numcompte
    A
  • UPDATE COMPTE SET montant montant - V WHERE
  • numcompte
    B
  • END transfert

4
Graphe dune transaction
5
Modèle dexécution
6
Exemple de transaction
  • Create or update procedure essai isbegin
    update emp set salairesalaire1.1 savepoint
    pre_insert insert into projets
    values(1000,'BD') savepoint pre_delete
    delete from projets where numproj1000 case
    error is when 0 the commit when 1 then
    rollback to pre_delete when 2 then rollback
    to pre_insert when others then rollback
    end caseend essai

7
Journalisationmémoire sûre
8
Journalisation
  • ÉlĂ©ments journal
  • ltTi, BEGIN_TRANSACTIONgt
  • ltTi, READ, Agt
  • ltTi, WRITE, A, ancval, nouvvalgt
  • ltTi, COMMITgt
  • ltTi, ROLLBACKgt
  • ltTi, END_TRANSACTIONgt

9
Exemple
10
Mémoire sûre
  • T1 beginT1 R A 1000 900 T2 beginT1 W B 2000
    21000T2 W C 800 500 ---gt UNDO automatiqueT1
    COMMIT ---gt REDO automatique panne

11
Implémentation
12
Accès concurrents
13
Problèmes de concurrence perte de mise à jour
  • T1 inc(A,10) T2 inc(A,20)
  • initialement, A100 T1T2 T2T1 ? A130
  • Au final, A120. ExĂ©cution erronĂ©e et incohĂ©rente

14
Incohérences
  • Avant AB100 T1T2 ? A198, B202 T2T1 ?
    A199, B201

15
Lectures non reproductibles
16
Annulation sans remise en état
17
Exécution correcte
  • Une exĂ©cution correcte de transaction doit
    délivrer le même résultat que dans le cas d'une
    exécution séquentielle.
  • En gĂ©nĂ©ral, il est impossible de tester les
    schémas d'exécution (problème NP complet)
  •  
  • MĂ©thode pragmatique ne considĂ©rer que les
    opérations d'E/S

18
Théorème de correction
  • L'Ă©xĂ©cution concurrente de Ti et de Tj avec
  • Ti lt Tj
  •  
  • est correcte SSI on a, ? x
  •  
  • Wi(x) lt Rj(x)
  • Ri(x) lt Wj(x)

19
Correction / journal
  • R1(x)R2(y)W1(x)W2(y)R2(x)R3(z)W2(x)
  • est correcte et on a la prĂ©cĂ©dence T1 lt T2
  • R1(x)R1(y)R2(x)W3(z)W1(x)R2(z)W2(x)R4(t)
  • est incorrecte. On ne peut Ă©tablir une règle de
    précédence

20
Verrous mortels
21
Verrous mortels
  • Un tri topologique (possible) serait trop coĂ»teux
  • Deux solutions pragmatiques
  • Le verrouillage (le plus rĂ©pandu)
  • Lestampillage

22
Verrouillage
  • GranularitĂ© la table ou la ligne
  • Mode exclusif ou partagĂ©
  •  
  • lock table ltnomTablegt in share mode
  • lock table ltnomTablegt in exclusive mode
  • lock table ltnomTablegt in row share mode
  • lock table ltnomTablegt in row exclusive mode
  • lock table ltnomTablegt in share row exclusive
    mode
  • unlock ltnomTablegt

23
Compatibilité des verrous
24
Exemple de concurrence
  • UPDATE emp SET salairesalaire1.1
  • WHERE numemp30
  • SELECT FROM emp

25
(No Transcript)
26
(No Transcript)
27
  • Le schĂ©ma dexĂ©cution prĂ©cĂ©dent est correct car
    les deux transactions sont séquentialisées par le
    verrouillage
  • Le schĂ©ma suivant est Ă©galement correct, mais
    peut poser problème dans des conditions
    légèrement différentes

28
(No Transcript)
29
Interblocage
30
Moralité
  • Si on dĂ©verrouille trop tĂ´t lexĂ©cution peut
    être incohérente !
  • Si on dĂ©verrouille trop tard risque
    dinterblocage !
  • Il faut impĂ©rativement un protocole de
    déverrouillage

31
Verouillage en deux phases
32
Modèle de procédure 2PL
  • Create or replace procedure traitement_2PL is
  • Begin
  • lock table comptes in row exclusive mode
  • lock table clients in share mode
  • traitements
  • unlock table clients
  • unlock table comptes
  • End traitement_2PL

33
Conclusion partielle
  • Le 2PL garantit la correction du schĂ©ma
    dexécution en séquentialisant (sans doute trop)
    lexécution des transactions concurrentes.
  • Il ne prĂ©serve pas des risques de verrous
    mortels.
  • Il nous faut un protocole auxiliaire pour assurer
    des règles de priorité
  • WW et WD PrioritĂ© aux  vieilles  transactions

34
Protocole non-préemptif (WD)
35
Règle du WD
  • Ti plus vieille que Tj (Ti lt Tj) ? Ti attend
  • Ti plus jeune que Tj (TigtTj) ? Ti est avortĂ©e
  • Une transaction avortĂ©e est relancĂ©e en gardant
    son estampille!

36
Protocole préemptif (WW)
37
Règle du WW
  • Ti plus jeune que Tj (Ti gt Tj) ? Ti attend
  • Ti plus vieille que Tj (Ti lt Tj) ? Tj avortĂ©e
  • Une transaction avortĂ©e est relancĂ©e avec la
    mĂŞme estampille

38
Exemple dapplication
  • Clients(numcli, nom, prenom, adresse)
  • Comptes(numcpt, montant, annee, mois)
  • Possede(numcli, cumcpt, date_creation)
  • Operations(numoper, numcpt, montant, annee, mois,
    jour, commentaires)
  • SĂ©quence seq_op
  • On veut enregistrer chaque opĂ©ration et mettre Ă 
    jour le compte correspondant

39
En Wound-Wait
  • Create procedure gestion_ww (nc number(10),
  • mnt number(10,2), comt
    varchar2(255)) is
  • this_ts timestamp get_new_timestamp
  • concurrent_ts timestamp
  • concurrent_mode char(2)
  • Begin
  • concurrent_ts get_concurrent_ts(operations)
  • if concurrent_ts is not null then
  • concurrent_mode
  • get_concurrent_mode(concu
    rrent_ts)

40
  • if concurrent_mode in (X, RX) then
  • if this_ts gt concurrent_ts then
  • while active(concurrent_ts) loop
  • null
  • end loop
  • else reinit(concurrent_ts)
  • end if
  • end if
  • end if --fin du sil y a une transaction
    concurrente
  • lock table operations in row exclusive mode
  • insert into operations values(seq_op.nextval,
    nc, montant, an(sysdate), mois(sysdate),
    jour(sysdate), comt)

41
  • concurrent_ts get_concurrent_ts(comptes)
  • if concurrent_ts is not null then
  • concurrent_mode
  • get_concurrent_mode(concu
    rrent_ts)
  • if concurrent_mode in (X, RX) then
  • if this_ts gt concurrent_ts then
  • while active(concurrent_ts) loop
  • null
  • end loop
  • else reinit(concurrent_ts)
  • end if
  • end if
  • end if
  • Lock table comptes in row exclusive mode

42
  • Update comptes set montant montantmnt,
    anneean(sysdate), moismois(sysdate)
  • where numcptnc
  • unlock table comptes
  • unlock table operations
  • End gestion_ww

43
En Wait_DIE
  • Create procedure gestion_wd (nc number(10),
  • mnt number(10,2), comt
    varchar2(255)) is
  • this_ts timestamp get_new_timestamp
  • concurrent_ts timestamp
  • concurrent_mode char(2)
  • Begin
  • concurrent_ts get_concurrent_ts(operations)
  • if concurrent_ts is not null then
  • concurrent_mode
  • get_concurrent_mode(concu
    rrent_ts)

44
  • if concurrent_mode in (X, RX) then
  • if this_ts gt concurrent_ts then
  • reinit
  • else
  • while active(concurrent_ts) loop
  • null
  • end loop
  • end if
  • end if
  • end if --fin du sil y a une transaction
    concurrente
  • lock table operations in row exclusive mode
  • insert into operations values(seq_op.nextval,
    nc, montant, an(sysdate), mois(sysdate),
    jour(sysdate), comt)

45
  • concurrent_ts get_concurrent_ts(comptes)
  • if concurrent_ts is not null then
  • concurrent_mode
  • get_concurrent_mode(concu
    rrent_ts)
  • if concurrent_mode in (X, RX) then
  • if this_ts gt concurrent_ts then reinit
  • else
  • while active(concurrent_ts) loop
  • null
  • end loop
  • end if
  • end if
  • end if
  • lock table comptes in row exclusive mode

46
  • Update comptes set montant montantmnt,
    anneean(sysdate), moismois(sysdate)
  • where numcptnc
  • unlock table comptes
  • unlock table operations
  • end gestion_wd
Write a Comment
User Comments (0)
About PowerShow.com