Databases Transaktioner och samtidighet Real World Model User 4 Updates User Queries 3 Answers Updates User Queries 2 Answers Updates UserQueries 1 Answers Updates Queries Answers Database management system Processing of queries and updates Access to stored data Physical database december 2009 1 1 december 2009 2 2 Varför ska man kunna det här: Bara 4 platser kvar på flyget. Ettannatexempel: Lena Book(sess1,flight1,4); Add_passenger(Lena,sess1); Add_passenger(Göran, sess1); Add_passenger(Filip,sess1); José Administratören: Update employee Set salary = salary + 1000 Chefen: select sum(salary) from employee Add_passenger(Ludvig, sess1); Add_payment(Sess1, Lena); Confirm(Sess1,Tick); Fails Book(sess2,flight1,1); Add_passenger(Jose,sess2); Add_payment(sess1, Jose); Confirm(sess1,Tick); Generated code: For each emp in employee; Read(salary) Salary =salary + 1000 Write(salary); december 2009 3 3 december 2009 4 4 1
Denna föreläsning Vad är en transaktion? Samtidighet och serialisering Implementation av serialisering (låsning) Transaktioner december 2009 5 5 december 2009 6 6 Transaktioner Exempel på transaktioner En transaktion är den logiska enheten av databasbearbetning och kan bestå av en eller flera databasoperationer. Databasoperationer i en förenklad modell: read-item(x) write-item(x) december 2009 7 7 december 2009 8 8 2
Transaktioner Read-item(X) Q: Hur exekverar man en read-item och en write-item? 1. Hitta blocket som innehåller X 2. Kopiera blocket till primärminnet (buffert) 3. Kopiera X från bufferten till programvariabel X Obs: mera om buffert i nästa föreläsning. december 2009 9 9 december 2009 10 10 Write-item(X) Exempel på transaktioner 1. Hitta blocket som innehåller X 2. Kopiera blocket till primärminnet (buffert) 3. Kopiera värdet av programvariabel X till rätt plats i bufferten 4. Lagra det modifierade blocket på skivan december 2009 11 11 december 2009 12 12 3
Egenskaper hos transaktioner Egenskaper för transaktioner Minsta enhet av operation Kan ändra databasen Kan gå fel ACID: Atomicity, Consistency preservation, Isolation, Durability A: En transaktion är en atomär enhet för bearbetning. Allt eller inget. ACID-egenskaperna C: En databas som befinner sig i ett konsistent tillstånd (d.v.s. databasen uppfyller alla villkor i schemat och eventuella andra villkor) före exekveringen av en transaktion, befinner sig i ett konsistent tillstånd även efter exekveringen. december 2009 13 13 december 2009 14 14 Egenskaper för transaktioner Egenskaper för transaktioner ACID: Atomicity, Consistency preservation, Isolation, Durability Hur uppnår man ACID-egenskaperna? I: En transaktion borde framstå som om den exekverades isolerad från andra transaktioner. A: återställningssystemet C: programmeraren + DBMS I: samtidighetskontroll D: Ändringar som gjordes i databasen av en committad transaktion består i databasen. D: återställningssystemet december 2009 15 15 december 2009 16 16 4
Enanvändarsystem - Fleranvändarsystem Samtidighet Enanvändarsystem: högst 1 användare kan använda systemet vid varje tidpunkt Fleranvändarsystem: flera användare kan använda systemet samtidigt flera CPU: parallell bearbetning en CPU: interfoliering (eng. interleaving) december 2009 18 18 Notation Interfoliering december 2009 19 19 december 2009 20 20 5
Transactionsschema Vad händer om? När två transaktioner interfolierar refererar vi till ordningen mellan operationerna som ett transaktionsschema. december 2009 21 21 december 2009 22 22 Problem med interfoliering Lost-update Det finns fyra typer av problem som kan uppstår när vi har interfoliering. - Lost update - Dirty read - Incorrect summary - Unrepeatable read december 2009 23 23 december 2009 24 24 6
Temporary Update (Dirty-Read) Incorrect summary FAIL my-account := my-account1 - write-item(my-account1); my-account := my-account2 + write-item(my-account2); sum:= 0; sum := sum + my-account2; sum := sum + my-account1; december 2009 25 25 december 2009 26 26 Unrepeatable read Samtidighet Ett tidsschema S är seriellt om operationerna i varje transaktion T exekveras direkt efter varandra. Ett tidsschema S är serialiserbart om det finns ett ekvivalent seriellt tidsschema S'. ekvivalent: konfliktekvivalent Seriella scheman inneffektivs serialiserbara bättre Båda typerna undviker fel i transaktionerna december 2009 27 27 december 2009 28 28 7
Seriella scheman Seriella scheman december 2009 29 29 december 2009 30 30 Konfliktekvivalens Konfliktekvivalens Två operationer är i konflikt om följande gäller: (i) de tillhör olika transaktioner (ii) de accessar samma data X (iii) en av operationerna är write-item(x) Två tidschema S och S' är konfliktekvivalenta om ordningen mellan varje par av operationer i konflikt är samma i S och S'. I ett (konflikt)serialiserbart tidsschema kan man omorganisera operationerna som inte är i konflikt tills vi får ett seriellt tidsschema. december 2009 31 31 december 2009 32 32 8
Serialiserbart schema? Serialiserbart schema? december 2009 33 33 december 2009 34 34 Serialierbart schema? Algoritm för testning av serialiserbarhet Med hjälp av en riktad graf 1. skapa en nod för varje transaktion 2. om T j exekverar read-item(x) efter att T i exekverar writeitem(x), skapa en båge T i T j 3. om T j exekverar write-item(x) efter att T i exekverar readitem(x), skapa en båge T i T j december 2009 35 35 december 2009 36 36 9
Algoritm för testning av serialiserbarhet Algoritm för testning av serialiserbarhet 4. om T j exekverar write-item(x) efter att T i exekverar writeitem(x), Med hjälp av en riktad graf 1. skapa en nod för varje transaktion skapa en båge T i T j 2-4. för varje par av operationer i konflikt, skapa en båge T först T sist 5. S är serialiserbar om grafen inte innehåller någon cykel. 5. S är serialiserbar om grafen inte innehåller någon cykel. december 2009 37 37 december 2009 38 38 Serialiserbara scheman? Serialiserbara scheman? december 2009 39 39 december 2009 40 40 10
Implementation av serialiserbarhet Låsning Problem: Transaktioner uppstår interativt I realtid. Effektivitet viktigt grafsökning dyrt. Låsning: kontrollera access till data delade/odelade lås eller läs-/skrivlås: read-lock(x) write-lock(x) unlock(x) december 2009 41 41 december 2009 42 42 Delad/Odelad Låsning Delad/Odelad Låsning 1. En transaktion T ska låsa X m.h.a. read-lock(x) eller writelock(x) före exekvering av read-item(x). 4. En transaktion T ska inte använda ett read-lock(x) om den redan har ett läslås eller ett skrivlås på X. 2. En transaktion T ska låsa X m.h.a. write-lock(x) före exekvering av write-item(x). 5. En transaktion T ska inte använda ett write-lock(x) om den redan har ett läslås eller ett skrivlås på X. 3. En transaktion T måste låsa upp X m.h.a. unlock(x) efter att alla read-item(x) och write-item(x) i T har exekverats. december 2009 43 43 december 2009 44 44 11
Låsning Exempel Ursprunglig transaktion Med lås read-lock(my-account1); unlock(my-account1); write-lock(my-account2); write-lock(my-account); write-lock(my-account); my-account2:= my-account2 + 200; write_item(myaccount2); my-account2:= my-account2+200; write_item(myaccount2); unlock(my-account2); unlock(my-account); write-lock(other-account); unlock(my-account); unlock(other-account); december 2009 45 45 december 2009 46 46 Exempel Serialiserbarhet genom Tvåfaslåsning write-lock(account1); read-item(account1); account1 := account1-200; write_item(myaccount1); unlock(account1); write-lock(account2); read-item(account2); account2:= account2 + 200; write_item(account2); unlock(account2); sum:=0; read-lock(account1); read-item(account1); sum := sum + account1; unlock(account1); read-lock(account2); read-item(account2); sum := sum + account2; unlock(account2); En transaktion följer tvåfaslåsningsprotokollen om alla låsoperationer (read-lock, write-lock) kommer före den första unlock-operationen i transaktionen. En transaktion som följer tvåfaslåsningsprotokollen har en expansionsfas och en krympfas. december 2009 47 47 december 2009 48 48 12
Exempel fortsättning Tvåfaslåsning? write-lock(my-account1); my-account1 := my-account1-200; write_item(myaccount1); write-lock(my-account2); unlock(my-account1); my-account2:= my-account2 + 200; write_item(myaccount2); unlock(my-account2); sum:=0; read-lock(account1); read-item(account1); sum := sum + account1; read-lock(account2); unlock(account1); read-item(account2); sum := sum + account2; unlock(account2); read-lock(my-account1); write-lock(my-account2); unlock(my-account1); my-account2:= my-account2+200; write_item(myaccount2); unlock(my-account2); read-lock(my-account1); unlock(my-account1); write-lock(my-account2); my-account2:= my-account2+200; write_item(myaccount2); unlock(my-account2); december 2009 49 49 december 2009 50 50 Serialiserbarhet genom Tvåfaslåsning Vad händer om? Om alla transaktioner följer tvåfaslåsningsprotokollen då får man ett serialiserbart tidsschema. write-lock(my-account1); my-account1 := my-account1-200; write_item(myaccount1); write-lock(my-account2); my-account2:= my-account2 + 200; write_item(myaccount2); unlock(my-account1); unlock(my-account2); write-lock(my-account2); my-account2 := my-account2*1.1; write_item(myaccount2); write-lock(my-account1); my-account1:= my-account1*1.1; write_item(myaccount1); unlock(my-account1); unlock(my-account2); december 2009 51 51 december 2009 52 52 13
Deadlock Deadlock Två eller flera transaktioner väntar på varandra för data som är låst av en annan transaktion. TID förhindra deadlock: Write-lock(my-account1) Write-lock(my-account2) - protokoll: lås all data på förhand, wait-die, wound-wait, no waiting, cautious waiting Write-lock(my-account2) upptäcka deadlock: wait-for graph, timeouts Write-lock(my-account1) december 2009 53 53 Utsvältning Summering En transaktion exekveras inte för en obestämt tid medan de andra transaktioner exekveras normalt. Transaktioner ACID-egenskaper Problem med samtidighet Seriella och serialiserbara scheman Låsning och tvåfaslåsning Deadlock och lösningar till detta december 2009 55 55 december 2009 56 56 14