1 / 93

Concurrentiecontrole en herstel : Motivatie & Samenvatting

Gegevensbanken 2010 Begrippen van transactieverwerking II: technieken voor concurrentiecontrole en herstel Bettina Berendt www.cs.kuleuven.be/~berendt. Concurrentiecontrole en herstel : Motivatie & Samenvatting. Waar zijn we?. Les. Nr. wie. wat. 1. ED. intro, ER. 2. ED. EER. 3. ED.

ronald
Download Presentation

Concurrentiecontrole en herstel : Motivatie & Samenvatting

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Gegevensbanken 2010Begrippen van transactieverwerking II:technieken voor concurrentiecontrole en herstelBettina Berendtwww.cs.kuleuven.be/~berendt

  2. Concurrentiecontrole en herstel: Motivatie & Samenvatting

  3. Waar zijn we? Les Nr. wie wat 1 ED intro, ER 2 ED EER 3 ED relational model 4 ED mapping EER2relational 5 KV relational algebra, relational calculus 6 KV SQL 7 KV vervolg SQL 8 KV demo Access, QBE, JDBC 9 KV functional dependencies and normalisation 10 KV functional dependencies and normalisation 11 BB file structures and hashing Fysisch model / vragen 12 BB indexing I 13 BB indexing II and higher-dimensional structures 14 query processing BB 15 BB transactions 16 BB transactions II: concurrentie & herstel 17 BB Data mining (and a bit on d. warehousing) 18 ED XML, oodb, multimedia db

  4. Concurrentiecontrole Nog een plaats! Wacht even reserveer! U heeft hem Sorry ... t

  5. Herhaling: Gewenste eigenschappen van transacties • Atomicity: ondeelbaarheid • transactie wordt volledig uitgevoerd, of helemaal niet • Consistency preservation: • consistente gegevensbank moet na transactie nog steeds consistent zijn • Isolation: geïsoleerdheid • effect van transactie moet zijn alsof het de enige transactie is die uitgevoerd werd (geen interferentie met andere transacties) • er worden meestal 4 isolatieniveaus gedefineerd, naargelang van de graad van isolatie: • niveau 0: geen overschrijven van een ‘dirty read’ van een transactie op hoger niveau • niveau 1: geen verloren aanpassingen • niveau 2: geen verloren aanpassingen en geen ‘dirty reads’ • niveau 3: niveau 2 + ‘repeatable reads’ • Durability: duurzaamheid • effect van transactie moet persistent zijn, mag niet verloren gaan  concurrentie-controle

  6. Herhaling: Testen of garanderen van serialiseerbarheid • Problemen met testen van serialiseerbaarheid: • interleaving van operaties wordt bepaald door het besturingssysteem, niet vooraf te voorspellen • transacties worden continu aangeboden • begin en einde van roosters moeilijk te voorspellen • Indien rooster niet serialiseerbaar blijkt: • herstel nodig  duur • om deze problemen te vermijden: • test niet op serialiseerbaarheid • gebruik bij opstellen van transacties regels (protocols) om serialiseerbaarheid te verzekeren

  7. Herstel Nog een plaats! reserveer! t rollback (plan: commit)

  8. Herhaling: Gewenste eigenschappen van transacties  herstel • Atomicity: ondeelbaarheid • transactie wordt volledig uitgevoerd, of helemaal niet • Consistency preservation: • consistente gegevensbank moet na transactie nog steeds consistent zijn • Isolation: geïsoleerdheid • effect van transactie moet zijn alsof het de enige transactie is die uitgevoerd werd (geen interferentie met andere transacties) • er worden meestal 4 isolatieniveaus gedefineerd, naargelang van de graad van isolatie: • niveau 0: geen overschrijven van een ‘dirty read’ van een transactie op hoger niveau • niveau 1: geen verloren aanpassingen • niveau 2: geen verloren aanpassingen en geen ‘dirty reads’ • niveau 3: niveau 2 + ‘repeatable reads’ • Durability: duurzaamheid • effect van transactie moet persistent zijn, mag niet verloren gaan

  9. Herhaling: Mogelijke falingen • Mogelijke falingen die tijdens de uitvoering van een transactie kunnen optreden 1. computer-crash • inhoud van geheugen kan verloren zijn 2. transactie- of systeemfout • verkeerde parameter, overflow, deling door 0, logische programmeerfout,... 3. uitzonderingscondities • bv. bestand kan niet gelezen worden, ... 4. opgelegd door concurrentiecontrole • bv. transactie afgebroken wegens deadlock 5. schijf-fout • bv. beschadigd spoor 6. fysieke problemen, catastrofes • brand, stroomonderbreking, ... • Bij falingen van de types 1 tot 4 moet de oorspronkelijke toestand hersteld kunnen worden  REDOs + UNDOs  Backup + REDOs

  10. Agenda I Vergrendeling (locking) Tijdstempels Multiversietechnieken Optimistische concurrentiecontrole Granulariteit van items

  11. Agenda I Vergrendeling (locking) Tijdstempels Multiversietechnieken Optimistische concurrentiecontrole Granulariteit van items

  12. Vergrendeling • grendel (slot, lock) • variabele horend bij een gegevenselement in de gegevensbank • beschrijft de status van dat element t.o.v. mogelijke bewerkingen die erop kunnen worden uitgevoerd • soorten grendels: • binaire grendels: • twee mogelijke toestanden • gedeelde / exclusieve grendels (of read / write locks) • drie mogelijke toestanden

  13. Binaire grendels • twee mogelijke toestanden: lock(X) = 1 of 0 • 1: X is niet toegankelijk • 0: X is toegankelijk • twee bewerkingen • lock_item(X): een transactie vraagt toegang tot X • unlock_item(X): een transactie geeft X weer vrij (deze bewerkingen zijn steeds atomair)

  14. Binaire grendels: lock en unlock • lock manager van DBMS houdt • status van grendels, • wachtende transacties etc. bij lock_item(X): B: als LOCK(X) = 0 dan LOCK(X) := 1 anders wacht tot LOCK(X) = 0; spring naar B unlock_item(X): LOCK(X) := 0; als er transacties aan het wachten zijn op X: dan maak één van die transacties wakker

  15. Regels voor vergrendeling:Elke transactie T moet volgende regels volgen 1. T moet lock_item(X) uitvoeren voor read_item(X) of write_item(X) 2. T moet unlock_item(X) uitvoeren nadat alle read_item(X) en write_item(X) van T zijn uitgevoerd 3. T mag geen lock_item(X) uitvoeren als het al een grendel op T heeft 4. T mag geen unlock_item(X) uitvoeren als het geen grendel op T heeft

  16. Lees- / schrijf-vergrendeling • twee soorten grendels: lees-grendels en schrijf-grendels • ook gedeelde / exclusieve grendels genoemd • drie toestanden voor gegevenselement: • niet vergrendeld (geen grendel) • lees-grendel • schrijf-grendel • drie bewerkingen: • read_lock(X) • write_lock(X) • unlock_item(X)

  17. read_lock(X): B: als LOCK(X)="unlocked" dan LOCK(X):="read-locked"; aantal_reads(X) := 1 anders als LOCK(X) = "read-locked" dan aantal_reads(X) := aantal_reads(X)+1 anders wacht tot LOCK(X)="unlocked"; spring naar B write_lock(X): B: als LOCK(X)="unlocked" dan LOCK(X) := "write-locked" anders wacht tot LOCK(X)="unlocked"; spring naar B

  18. unlock_item(X): B: als LOCK(X)="write-locked" dan LOCK(X):="unlocked"; als er transacties zijn die wachten op X: dan maak 1 ervan wakker anders als LOCK(X) = "read-locked" dan aantal_reads(X) := aantal_reads(X)-1; als aantal_reads(X) = 0 dan LOCK(X) := "unlocked" als er transacties wachten op X: dan maak 1 ervan wakker

  19. Regels voor vergrendeling (bij lees / schrijf-vergrendeling):Elke transactie T moet volgende regels volgen: 1. T moet read_lock(X) of write_lock(X) uitvoeren vóór eender welke read_item(X) 2. T moet write_lock(X) uitvoeren vóór write_item(X) 3. T moet unlock(X) uitvoeren nadat alle read_item(X) en write_item(X) uitgevoerd zijn 4. T mag geen read_lock(X) uitvoeren als het al een (lees- of schrijf-) grendel heeft op X (*) 5. T mag geen write_lock(X) uitvoeren als het al een (lees- of schrijf-) grendel heeft op X (*) 6. T mag geen unlock(X) uitvoeren als het geen grendel heeft op X

  20. Afzwakken van regels • (*) regels kunnen afgezwakt worden: • upgrade: • als T al een leesgrendel op X heeft, en het is de enige transactie met een leesgrendel op X, dan kan dit met write_lock(X) in een schrijfgrendel veranderd worden • downgrade: • als T een schrijfgrendel op X heeft, kan dat met read_lock(X) verlaagd worden tot een leesgrendel = conversie van grendels

  21. Lees-/schrijf-vergrendeling  serialiseerbarheid? • Gebruik van bovenstaande regels vermijdt bepaalde problemen maar garandeert geen serialiseerbaarheid • vb: fig. 18.3 (volgende pagina) • twee mogelijke seriële uitvoeringen: • 1. tel X bij Y op, tel dan Y bij X op • 2. tel Y bij X op, tel dan X bij Y op • in een serieel schema zal één van de transacties de originele X/Y gebruiken en de andere de aangepaste • in 18.3c gebruiken beide transacties de originele X/Y • probleem: Y is te vroeg vrijgegeven • daarom: strengere set regels (= een protocol) volgen

  22. Voorbeeld

  23. Twee-fasen-vergrendeling • protocol van vergrendeling om bepaalde problemen te vermijden: • alle vergrendelingen van een transactie gebeuren vóór de eerste ontgrendelbewerking • binnen een transactie gebeurt vergrendeling steeds in twee fasen: • "expanding phase": plaatsen van grendels • "shrinking phase": vrijgeven van grendels • de fasen zijn strikt gescheiden • eens een grendel vrijgegeven is, kunnen er geen nieuwe meer geplaatst worden • twee-fasen-vergrendeling garandeert serialiseerbaarheid • maar vermijdt geen deadlock / starvation

  24. Voorbeeld: verschovene operaties T1 T2 read_lock(Y); read_lock(X); read_item(Y); read_item(X); write_lock(X); write_lock(Y); unlock(Y); unlock(X); read_item(X); read_item(Y); X:=X+Y; Y := X+Y; write_item(X); write_item(Y); unlock(X); unlock(Y); T1:write_lock(x) verschoven tot voor unlock(Y) T2:write_lock(Y) verschoven tot voor unlock(X)

  25. Voorbeeld: de twee fasen

  26. Deadlock • 2 processen wachten op elkaar • hebben elk een grendel die de ander wil • geven die grendel niet vrij voor ze de andere grendel krijgen

  27. Varianten van twee-fasen-vergrendeling • basisversie: • zoals gezien • conservatieve 2FV: • alle grendels plaatsen voor transactie begint • vermijdt deadlocks • probleem: • niet altijd bekend op voorhand welke grendels nodig zullen zijn • strikte, resp. rigoureuze 2FV: • geen enkel schrijfgrendel, resp. grendel vrijgeven voor commit of abort • garandeert een strikt rooster • is niet deadlock-vrij

  28. besluit: • twee-fasen-vergrendeling • garandeert serialiseerbaarheid van rooster • maar vermijdt geen deadlocks of starvation • om dit op te lossen nog andere technieken nodig • twee benaderingen van deadlock: • vermijden (deadlock prevention) • opsporen (deadlock detection)

  29. Deadlock-vermijdende protocollen • alles vooraf vergrendelen (cf. conservatieve 2FV) • grote beperking op concurrentie • items steeds in welbepaalde volgorde vergrendelen • programmeur moet deze volgorde kennen: in de praktijk niet wenselijk • gebruik van tijdstempels (timestamps)

  30. Agenda I Vergrendeling (locking) Tijdstempels Multiversietechnieken Optimistische concurrentiecontrole Granulariteit van items

  31. Deadlock-preventie met tijdstempels • elke transactie T krijgt tijdstempel TS(T) toegekend • als T1 start voor T2: TS(T1) < TS(T2) • mogelijke schema’s: • stel: • Ti wil X vergrendelen maar kan niet omdat Tj er een grendel op heeft • wait-die schema : • als TS(Ti) < TS(Tj) (Ti is ouder dan Tj ) • dan mag Ti wachten tot grendel vrijkomt • anders wordt Ti afgebroken (= de jongere transactie) en later herstart met dezelfde timestamp • wound-wait schema : • als TS(Ti) < TS(Tj) (Ti is ouder dan Tj ) • dan wordt Tj (de jongere transactie) afgebroken • anders mag Ti (de jongere transactie) wachten tot grendel vrijkomt

  32. Vordelen en nadelen • in beide gevallen wordt jongste transactie afgebroken en later herstart • gemiddeld gaat minder werk verloren • voordeel: deadlock-vrij • oudere transactie wacht steeds op jongere (wait-die) of omgekeerd (wound-wait) • dus nooit lussen in wachtpatroon • nadeel: • sommige transacties worden afgebroken zelfs al zouden ze geen deadlock veroorzaken • wait-die : Ti mogelijk vaak afgebroken en herstart

  33. Deadlock-preventie zonder tijdstempels • verschillende schema’s • niet wachten: "no waiting" schema • als een transactie een grendel niet kan krijgen, wordt ze direct afgebroken en na een zekere tijd herstart • voorzichtig wachten: "cautious waiting" schema • transactie mag alleen wachten op een grendel als de transactie die die grendel heeft niet zelf aan het wachten is • Stel: Ti wil X vergrendelen, Tj heeft grendel op X • als Tj niet zelf wacht op een grendel • dan laat Ti wachten • anders breek Ti af • is deadlock vrij! • gebruik van timeouts: • als een transactie langer wacht dan een welbepaalde tijd, wordt ze automatisch afgebroken en herstart • detecteert niet echt deadlocks

  34. Deadlock-detectie • periodieke controle of systeem in deadlock is • enkel interessant wanneer er weinig interferentie tussen transacties is • (korte transacties die slechts weinig items vergrendelen, of weinig transacties) • detectie: op basis van "wacht op"-graaf • lus in graaf = deadlock • indien deadlock: • kies slachtoffer om af te breken • "victim selection": • voorkeur voor jonge transacties die weinig aanpassingen gemaakt hebben • of transacties die in meerdere cycles in de graaf betrokken zijn

  35. Starvation (“verhongeren”) • definitie: • een transactie moet steeds maar blijven wachten, terwijl andere transacties vooruitgaan 1. doordat andere wachtende transacties steeds de vrijkomende grendels krijgen, of 2. doordat de "victim selection" steeds deze transactie kiest • oplossingen: • 1: te vermijden door eerlijke toekenning van grendels • bv. first come, first serve • verschillende prioriteiten + proces dat lang wacht krijgt steeds hogere prioriteit • 2: te vermijden door eerlijke slachtofferselectie • selecteer transactie met laagste prioriteit • bij heropstarten van die transactie krijgt ze automatisch een hogere prioriteit • opmerking: • wait-die en wound-wait voorkomen starvation

  36. Concurrentiecontrole d.m.v. tijdstempels • serialiseerbaarheid garanderen d.m.v. tijdstempels i.p.v. grendels en deadlock-preventie/detectie • geen grendels nodig  geen deadlocks mogelijk • er is één tijdstempel per transactie • tijdstempels zijn uniek • en in chronologische volgorde • T1 voor T2 aangeboden  TS(T1) < TS(T2) • tijdstempels ordenen de transacties • het transactierooster met tijdstempelordening is equivalent met het serieel rooster met precies die volgorde van transacties

  37. met elk item X worden twee tijdstempelwaarden geassocieerd: • read_TS(X) • grootste tiidstempel van alle transacties die met succes X gelezen hebben ( jongste transactie) • write_TS(X) • grootste tijdstempel van alle transacties die met succes X geschreven hebben ( jongste transactie) • voor een transactie T die read_item(X) of write_item(X) wil uitvoeren: • vergelijk tijdstempels •  beslis of T die actie mag uitvoeren • vb: T mag X niet lezen als X door een transactie met latere tijdstempel geschreven is

  38. wat als tijdstempels niet kloppen? • transactie afbreken, ongedaan maken, en opnieuw aanbieden (nu met latere TS) • bij ongedaan maken (rollback): • transacties die iets gelezen hebben dat door deze transactie geschreven werd ook ongedaan maken •  cascading rollback • ordening op basis van tijdstempels • garandeert serialiseerbaarheid • maar niet elk serialiseerbaar rooster wordt aanvaard • vermijdt deadlock (maar geen starvation)

  39. Basis tijdstempelordeningsalgoritme Transactie T voert write_item(X) uit: als read_TS(X) > TS(T) of write_TS(X) > TS(T): (write_item komt te laat, jongere transacties hebben intussen al een oudere waarde van X gelezen of een jongere geschreven) breek T af en maak T ongedaan anders write_item(X); write_TS(X) := TS(T) Transactie T voert read_item(X) uit: als write_TS(X) > TS(T): (te lezen waarde is intussen al overschreven door jongere transactie) breek T af en maak T ongedaan anders read_item(X); read_TS(X) := max(TS(T), read_TS(X))

  40. problemen met het basis tijdstempelordeningsalgoritme: • cascading rollbacks • niet herstelbaar • reeds gecommitte transacties moeten soms ook ongedaan gemaakt worden • strikte tijdstempelordening: • = een variante van het basis algoritme • een transactie T • die read_item(X) of write_item(X) doet met TS(T) > write_TS(X) • wacht met deze operatie tot de transactie met timestamp write_item(X) gecommit of afgebroken is • garandeert strikt rooster

  41. Thomas’ schrijfregel: licht gewijzigde versie t.o.v. basis tijdstempelordeningsalgoritme • legt geen conflict-serialiseerbaarheid op • verwerpt minder write_items • wijziging aan write_item procedure: Transactie T voert write_item(X) uit: als read_TS(X) > TS(T): (write_item komt te laat) breek T af en maak T ongedaan anders als write_TS(X)>TS(T): (write_item is niet meer relevant) voer de write_item niet uit maar ga gewoon door (evt. problemen hierdoor veroorzaakt worden ontdekt door andere regels) anders write_item(X); write_TS(X) := TS(T)

  42. Agenda I Vergrendeling (locking) Tijdstempels Multiversietechnieken Optimistische concurrentiecontrole Granulariteit van items

  43. Multiversie-concurrentiecontrole • er worden meerdere waarden (versies) van een item X door het systeem bewaard: • X1, X2, ..., Xk • voor elke versie zijn er twee tijdstempels: • read_TS( Xi ): • grootste TS van alle T die Xi met succes gelezen hebben • write_TS( Xi ): • TS van de T die Xi geschreven heeft • als T een write_item(X) mag uitvoeren: • creatie van nieuwe versie Xk+1 • met • read_TS(Xk+1), write_TS(Xk+1) := TS(T) • Als T de waarde van versie Xi mag lezen: • wordt • read_TS(Xi) := max(read_TS(Xi), TS(T))

  44. Transactie T wil een write_item(X) uitvoeren: zij Xi de versie van X met de grootste write_TS(Xi) <= TS(T) als TS(T) < read_TS(Xi) (d.w.z. versie Xi zou dan moeten gelezen zijn nadat T geschreven heeft) dan breek T af en maak T ongedaan anders creëer nieuwe versie Xj van X read_TS(Xj) := TS(T) write_TS(Xj) := TS(T) TransactieT wil een read_item(X) uitvoeren: zoek de versie i van X met hoogste write_TS(Xi) <= TS(T) geef de waarde van Xi terug aan T

  45. Er bestaan nog andere multiversie-technieken • bv. met grendels i.p.v. tijdstempels • ...

  46. Agenda I Vergrendeling (locking) Tijdstempels Multiversietechnieken Optimistische concurrentiecontrole Granulariteit van items

  47. Optimistische concurrentiecontrole • methode: • er gebeurt geen controle terwijl transactie wordt uitgevoerd • alle aanpassingen gebeuren in lokale kopies van gegevens • op het einde van de transactie: valideringsfase • indien serialiseerbaarheid voldaan: • pas gegevensbank aan, commit transactie • indien niet: • herstart transactie later • drie fasen: • leesfase: • T kan waarden van gegevensbank lezen • aanpasingen gebeuren in lokale kopies • valideringsfase • controle op serialiseerbaarheid • schrijffase: • als controle positief blijkt, worden aanpassingen in de gegevensbank geschreven

  48. voordeel: • alle controles voor een transactie in één keer ( weinig last voor en tijdens transactie zelf) • bij kleine interferentie tussen transacties: • meeste transacties worden succesvol gevalideerd • bij grote interferentie: • veel volledig uitgevoerde transacties moeten herstart worden

  49. Implementering van optimistische concurrentiecontrole met tijdstempels • voor elke transactie: • write_set: verzameling van alle geschreven items • read_set: verzameling van alle gelezen items • start- en eindtijd voor de 3 fasen wordt bijgehouden met tijdstempels • valideringsfase controleert of Ti niet interfereert met een committed transactie of met een transactie in valideringsfase: • Voor elke Tj die gecommit of in valideringsfase is, moet één van volgende eigenschappen gelden: 1. Tj beëindigt zijn schrijffase voor Ti zijn leesfase begint 2. Ti start zijn schrijffase nadat Tj zijn schrijffase beëindigt, en read_set(Ti)  write_set(Tj) =  3. Tj beëindigt leesfase voor Ti leesfase beëindigt, en read_set(Ti)  write_set(Tj) =  en write_set(Ti)  write_set(Tj) =  • Indien OK: • succes; • zoniet: Ti faalt ( later herstarten )

  50. Agenda I Vergrendeling (locking) Tijdstempels Multiversietechnieken Optimistische concurrentiecontrole Granulariteit van items

More Related