Tvåfasig låsningRedigera
Enligt protokollet för tvåfasig låsning hanterar en transaktion sina lås i två distinkta, på varandra följande faser under transaktionens utförande:
- Expanderande fas (även kallad Växande fas): lås förvärvas och inga lås släpps (antalet lås kan bara öka).
- Shrinking phase (aka Contracting phase): lås frigörs och inga lås förvärvas.
Låsningsreglerna för de två faserna kan sammanfattas så här: förvärva aldrig ett lås efter att ett lås har frigjorts. Serialiseringsegenskapen är garanterad för ett schema med transaktioner som följer denna regel.
Typiskt sett, utan uttrycklig kunskap i en transaktion om slutet av fas 1, bestäms det säkert först när en transaktion har avslutat behandlingen och begärt commit. I detta fall kan alla lås frigöras på en gång (fas 2).
Konservativ tvåfasig låsningRedigera
Skillnaden mellan 2PL och C2PL är att C2PL:s transaktioner erhåller alla lås som de behöver innan transaktionerna påbörjas. Detta för att säkerställa att en transaktion som redan har vissa låsningar inte blockerar i väntan på andra låsningar. Konservativ 2PL förhindrar låsningar.
Strikt tvåfaslåsningRedigera
För att följa S2PL-protokollet måste en transaktion följa 2PL och släppa sina skrivspärrar (exklusiva) först efter det att den har avslutats, dvs. antingen bekräftats eller avbrutits. Å andra sidan frigörs läslås (delade) regelbundet under fas 2. Detta protokoll är inte lämpligt i B-träd eftersom det orsakar flaskhals (medan B-träd alltid börjar söka från den överordnade roten).
Stark strikt tvåfaslåsningRedigera
Stark strikt, eller Stark schemaläggning, eller Stark tvåfaslåsning
För att följa stark strikt tvåfaslåsning (SS2PL) släpper låsningsprotokollet både skriv- (exklusiva) och läslås (delade) som tillämpas av en transaktion först efter att transaktionen har avslutats, dvs, endast efter att både ha avslutat utförandet (varit redo) och blivit antingen bekräftad eller avbruten. Detta protokoll uppfyller också S2PL-reglerna. En transaktion som följer SS2PL kan ses som att den har en fas 1 som varar under hela transaktionens genomförande och ingen fas 2 (eller en degenererad fas 2). Således återstår egentligen bara en fas, och ”tvåfas” i namnet verkar fortfarande användas på grund av den historiska utvecklingen av begreppet från 2PL och att 2PL är en superklass. SS2PL-egenskapen hos ett schema kallas också Rigorositet. Det är också namnet på klassen av scheman som har denna egenskap, och ett SS2PL-schema kallas också för ett ”rigoröst schema”. Termen ”Rigorositet” är fri från det onödiga arvet av ”tvåfasig” och är dessutom oberoende av någon (låsnings)mekanism (i princip kan andra blockeringsmekanismer användas). Egenskapens respektive låsningsmekanism kallas ibland Rigorös 2PL.
SS2PL är ett specialfall av S2PL, dvs. SS2PL-klassen av scheman är en riktig underklass av S2PL (varje SS2PL-schema är också ett S2PL-schema, men det finns S2PL-scheman som inte är SS2PL).
SS2PL har varit det protokoll för samtidighetsstyrning som valts ut för de flesta databassystem och som använts sedan deras tidiga dagar på 1970-talet. Det har visat sig vara en effektiv mekanism i många situationer och ger förutom Serializability även Strictness (ett specialfall av cascadeless Recoverability), vilket är avgörande för effektiv återställning av databaser, och även Commitment ordering (CO) för att delta i distribuerade miljöer där en CO-baserad distribuerad serializability och globala serializability-lösningar används. Eftersom det är en delmängd av CO finns ett effektivt genomförande av distribuerad SS2PL utan en distribuerad låshanterare (DLM), medan distribuerade låsningar (se nedan) löses automatiskt. Det faktum att SS2PL som används i multidatabassystem säkerställer global serialiseringsbarhet har varit känt i flera år innan CO upptäcktes, men det var först med CO som man förstod den roll som ett atomärt åtagandeprotokoll spelar när det gäller att upprätthålla global serialiseringsbarhet, liksom observationen av automatisk lösning av distribuerade dödlägen (se ett detaljerat exempel på distribuerat SS2PL). Faktum är att SS2PL ärver egenskaper som återställbarhet och CO är viktigare än att vara en delmängd av 2PL, som i sig själv i sin allmänna form, förutom att den innehåller en enkel mekanism för serialisering (serialisering förutsätts dock också av CO), inte är känd för att förse SS2PL med några andra viktiga egenskaper. Det är inte känt att 2PL i sin allmänna form, eller i kombination med Strictness, dvs. Strict 2PL (S2PL), används i praktiken. Det populära SS2PL kräver inte att man markerar ”slutet av fas 1”, vilket 2PL och S2PL gör, och är därför enklare att genomföra. Till skillnad från den allmänna 2PL ger SS2PL dessutom, som nämnts ovan, de användbara egenskaperna Strictness och Commitment ordering properties.
Många varianter av SS2PL finns som använder olika låstyper med olika semantik i olika situationer, inklusive fall där låstypen ändras under en transaktion. Noterbart är varianter som använder låsning med flera granulariteter.
- SS2PL vs. S2PL: Båda tillhandahåller serialiserbarhet och strikthet. Eftersom S2PL är en överklass till SS2PL kan den i princip ge mer samtidighet. I praktiken märks dock ingen samtidighetsfördel (exakt samma låsning finns för båda, med praktiskt taget inte mycket tidigare låsfrigivning för S2PL), och den övertid som det innebär att hantera en mekanism för slutet av fas 1 i S2PL, som är skild från transaktionsslutet, är inte motiverad. SS2PL tillhandahåller en beställning av åtaganden, men S2PL gör det inte. Detta förklarar varför SS2PL föredras framför S2PL.
- Särskilt före 1990, men även därefter, har termen ”Strict 2PL” (S2PL) i många artiklar och böcker, t.ex. (Bernstein et al. 1987, s. 59), ofta definierats genom låsningsprotokollet ”Release all locks only after transaction end”, vilket är protokollet för SS2PL. ”Strict 2PL” kan alltså inte vara namnet på skärningspunkten mellan Strictness och 2PL, som är större än den klass som genereras av SS2PL-protokollet. Detta har skapat förvirring. Med en uttrycklig definition av S2PL som skärningspunkten mellan Strictness och 2PL, ett nytt namn för SS2PL och en uttrycklig distinktion mellan klasserna S2PL och SS2PL har artiklarna (Breitbart et al. 1991) och (Raz 1992) haft för avsikt att reda ut förvirringen: i den första artikeln används namnet ”rigorositet” och i den andra ”SS2PL”.”
- En mer allmän egenskap än SS2PL finns (en schemaöverklass), Strict commitment ordering (Strict CO, eller SCO), som också ger både serialiserbarhet, stränghet och CO, och som har liknande låsningsöverskott. Till skillnad från SS2PL blockerar inte SCO vid en läs- och skrivkonflikt (en läslåsning blockerar inte förvärvandet av en skrivlåsning; både SCO och SS2PL har samma beteende vid skriv-läs- och skriv- och skrivkonflikter) på bekostnad av en eventuell fördröjd överlämning, och vid en sådan typ av konflikt har SCO en kortare genomsnittlig tid för slutförandet av en transaktion och bättre prestanda än SS2PL. Medan SS2PL följer tabellen för låskompatibilitet ovan, har SCO följande tabell:
Låstyp | läs-lås | skriv-lås |
---|---|---|
läs-lock | ||
X | X | X |
Observera att även om SCO frigör alla lås i slutet av transaktionen och följer 2PL- låsningsreglerna, SCO inte är en delmängd av 2PL på grund av dess annorlunda låskompatibilitetstabell. SCO tillåter materialiserade läs- och skrivkonflikter mellan två transaktioner i fas 1, vilket 2PL inte tillåter i fas 1 (se materialiserade konflikter i Serialiserbarhet). Å andra sidan tillåter 2PL andra materialiserade konflikttyper i fas 2 som SCO inte tillåter alls. Tillsammans innebär detta att schemaklasserna 2PL och SCO är omöjliga att jämföra (dvs. ingen klass innehåller den andra klassen).
Sammanfattning – Relationer mellan klasserRedigera
Mellan två schemaklasser (definierade av deras schemas respektive egenskaper) som har gemensamma scheman, innehåller antingen den ena den andra (innehåller strikt om de inte är likvärdiga), eller så är de osammanhängande. Relationerna mellan 2PL-klasserna och andra viktiga schemaklasser sammanfattas i följande diagram. 2PL och dess underklasser är i sig blockerande, vilket innebär att det inte finns några optimistiska implementationer för dem (och närhelst ”Optimistic 2PL” nämns hänvisar det till en annan mekanism med en klass som även innehåller scheman som inte ingår i 2PL-klassen).