Isolasjon. Repeatable Read- og Serializable-nivåer
Repeatable Read
Repeatable Read-isolasjon i databaser sikrer at når du starter en transaksjon, ser du et øyeblikksbilde av databasen som forblir uendret gjennom hele oppgaven.
Dette betyr at selv om andre endringer skjer i databasen mens du arbeider, vil du kun se dataene slik de var da du begynte.
Transaksjoner under Repeatable Read-isolasjon holder leselåser på alle rader de refererer til og skrivelåser på rader de setter inn, oppdaterer eller sletter. Dette forhindrer tapte oppdateringer, skitne og ikke-repeterbare lesninger.
Det er imidlertid ett problem som fortsatt kan oppstå med denne typen isolasjon – phantom read.
Phantom read
Phantom read kan oppstå når én transaksjon leser data og en annen transaksjon legger til nye poster i databasen. Som et resultat kan vi få ulike resultatmengder for to påfølgende lesetransaksjoner.
Non-repeatable read vs phantom read
Non-repeatable read oppstår når samme spørring utført av Bruker A returnerer forskjellige verdier for samme rad mellom påfølgende lesninger, vanligvis på grunn av endringer gjort av Bruker B.
Phantom read, derimot, skjer når samme spørring utført av Bruker A returnerer forskjellige sett med rader mellom påfølgende lesninger, selv om de individuelle radene ikke nødvendigvis er oppdatert.
Vi kan angi dette isolasjonsnivået i vår SQL-spørring ved å bruke følgende kommando:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Serializable
Serializable er det høyeste isolasjonsnivået i databaser, og sikrer den strengeste formen for samtidighetskontroll.
På dette nivået blir transaksjoner utført som om de behandles sekvensielt, én etter én, selv om de faktisk kan kjøres parallelt. Dette sikrer at resultatet av transaksjonene er det samme som om de ble utført i en eller annen sekvensiell rekkefølge, opprettholder konsistens og forhindrer alle kjente samtidighetsanomalier.
Merk
Bruk av denne typen isolasjon kan føre til redusert ytelse på grunn av økt låsing.
Vi kan bruke følgende setning for å angi dette isolasjonsnivået i vår SQL-spørring:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
What is the difference between phantom read and non-repeatable read?
Can you give an example of how phantom reads occur in practice?
How does the Serializable isolation level prevent phantom reads?
Awesome!
Completion rate improved to 4.35
Isolasjon. Repeatable Read- og Serializable-nivåer
Sveip for å vise menyen
Repeatable Read
Repeatable Read-isolasjon i databaser sikrer at når du starter en transaksjon, ser du et øyeblikksbilde av databasen som forblir uendret gjennom hele oppgaven.
Dette betyr at selv om andre endringer skjer i databasen mens du arbeider, vil du kun se dataene slik de var da du begynte.
Transaksjoner under Repeatable Read-isolasjon holder leselåser på alle rader de refererer til og skrivelåser på rader de setter inn, oppdaterer eller sletter. Dette forhindrer tapte oppdateringer, skitne og ikke-repeterbare lesninger.
Det er imidlertid ett problem som fortsatt kan oppstå med denne typen isolasjon – phantom read.
Phantom read
Phantom read kan oppstå når én transaksjon leser data og en annen transaksjon legger til nye poster i databasen. Som et resultat kan vi få ulike resultatmengder for to påfølgende lesetransaksjoner.
Non-repeatable read vs phantom read
Non-repeatable read oppstår når samme spørring utført av Bruker A returnerer forskjellige verdier for samme rad mellom påfølgende lesninger, vanligvis på grunn av endringer gjort av Bruker B.
Phantom read, derimot, skjer når samme spørring utført av Bruker A returnerer forskjellige sett med rader mellom påfølgende lesninger, selv om de individuelle radene ikke nødvendigvis er oppdatert.
Vi kan angi dette isolasjonsnivået i vår SQL-spørring ved å bruke følgende kommando:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Serializable
Serializable er det høyeste isolasjonsnivået i databaser, og sikrer den strengeste formen for samtidighetskontroll.
På dette nivået blir transaksjoner utført som om de behandles sekvensielt, én etter én, selv om de faktisk kan kjøres parallelt. Dette sikrer at resultatet av transaksjonene er det samme som om de ble utført i en eller annen sekvensiell rekkefølge, opprettholder konsistens og forhindrer alle kjente samtidighetsanomalier.
Merk
Bruk av denne typen isolasjon kan føre til redusert ytelse på grunn av økt låsing.
Vi kan bruke følgende setning for å angi dette isolasjonsnivået i vår SQL-spørring:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Takk for tilbakemeldingene dine!