Isolation: Repeatable Read och Serializable-nivåer
Svep för att visa menyn
Repeatable Read
Isoleringsnivån Repeatable Read i databaser säkerställer att när du startar en transaktion ser du en ögonblicksbild av databasen som förblir oförändrad under hela din uppgift.
Detta innebär att även om andra ändringar sker i databasen medan du arbetar, kommer du endast att se data som de var när du började.
Transaktioner under Repeatable Read-isolering håller läslås på alla rader de refererar till och skrivlås på rader de infogar, uppdaterar eller tar bort. Detta förhindrar förlorade uppdateringar, smutsiga och icke-repetitiva läsningar.
Det finns dock ett problem som fortfarande kan uppstå med denna typ av isolering – fantomläsning.
Fantomläsning
Fantomläsningar uppstår när en transaktion kör om en fråga och hittar olika uppsättningar av rader som uppfyller det ursprungliga frågevillkoret.
Till exempel, anta att en transaktion frågar efter alla ordrar med ett totalbelopp över $1000. Om en annan transaktion infogar en ny order med ett totalbelopp som uppfyller detta villkor mellan den första och andra körningen av frågan, kommer den första transaktionen att observera denna extra rad vid den andra körningen, vilket resulterar i en fantomläsning.
Fantomläsning kan uppstå när en transaktion läser data och en annan transaktion lägger till nya poster i databasen. Som ett resultat kan vi få olika resultatmängder för två på varandra följande lästransaktioner.
Icke-repeterbar läsning vs fantomläsning
Icke-repeterbar läsning uppstår när samma fråga som körs av Användare A returnerar olika värden för samma rad mellan på varandra följande läsningar, vanligtvis på grund av ändringar av Användare B.
Fantomläsning, å andra sidan, inträffar när samma fråga som körs av Användare A returnerar olika uppsättningar av rader mellan på varandra följande läsningar, även om enskilda rader själva inte har uppdaterats.
Vi kan ange denna isoleringsnivå i vår SQL-fråga med följande kommando:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Serializable
Isoleringsnivån Serializable är den högsta nivån av isolering i databaser och säkerställer den mest strikta formen av samtidighetskontroll.
På denna nivå utförs transaktioner som om de behandlades seriellt, en efter en, även om de faktiskt kan köras parallellt. Detta säkerställer att resultatet av transaktionerna är detsamma som om de utfördes i någon seriell ordning, vilket bibehåller konsistens och förhindrar alla kända samtidighetsavvikelser.
Notera
Användning av denna typ av isolering kan leda till minskad prestanda på grund av ökad låsning.
Vi kan använda följande sats för att ställa in denna isoleringsnivå i vår SQL-fråga:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Isolation: Repeatable Read och Serializable-nivåer
Repeatable Read
Isoleringsnivån Repeatable Read i databaser säkerställer att när du startar en transaktion ser du en ögonblicksbild av databasen som förblir oförändrad under hela din uppgift.
Detta innebär att även om andra ändringar sker i databasen medan du arbetar, kommer du endast att se data som de var när du började.
Transaktioner under Repeatable Read-isolering håller läslås på alla rader de refererar till och skrivlås på rader de infogar, uppdaterar eller tar bort. Detta förhindrar förlorade uppdateringar, smutsiga och icke-repetitiva läsningar.
Det finns dock ett problem som fortfarande kan uppstå med denna typ av isolering – fantomläsning.
Fantomläsning
Fantomläsningar uppstår när en transaktion kör om en fråga och hittar olika uppsättningar av rader som uppfyller det ursprungliga frågevillkoret.
Till exempel, anta att en transaktion frågar efter alla ordrar med ett totalbelopp över $1000. Om en annan transaktion infogar en ny order med ett totalbelopp som uppfyller detta villkor mellan den första och andra körningen av frågan, kommer den första transaktionen att observera denna extra rad vid den andra körningen, vilket resulterar i en fantomläsning.
Fantomläsning kan uppstå när en transaktion läser data och en annan transaktion lägger till nya poster i databasen. Som ett resultat kan vi få olika resultatmängder för två på varandra följande lästransaktioner.
Icke-repeterbar läsning vs fantomläsning
Icke-repeterbar läsning uppstår när samma fråga som körs av Användare A returnerar olika värden för samma rad mellan på varandra följande läsningar, vanligtvis på grund av ändringar av Användare B.
Fantomläsning, å andra sidan, inträffar när samma fråga som körs av Användare A returnerar olika uppsättningar av rader mellan på varandra följande läsningar, även om enskilda rader själva inte har uppdaterats.
Vi kan ange denna isoleringsnivå i vår SQL-fråga med följande kommando:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Serializable
Isoleringsnivån Serializable är den högsta nivån av isolering i databaser och säkerställer den mest strikta formen av samtidighetskontroll.
På denna nivå utförs transaktioner som om de behandlades seriellt, en efter en, även om de faktiskt kan köras parallellt. Detta säkerställer att resultatet av transaktionerna är detsamma som om de utfördes i någon seriell ordning, vilket bibehåller konsistens och förhindrar alla kända samtidighetsavvikelser.
Notera
Användning av denna typ av isolering kan leda till minskad prestanda på grund av ökad låsning.
Vi kan använda följande sats för att ställa in denna isoleringsnivå i vår SQL-fråga:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Tack för dina kommentarer!