Isolasjon. Repeatable Read- og Serializable-nivåer
Repeatable Read
Repeatable Read-isolasjon i databaser sikrer at når en transaksjon starter, får du et øyeblikksbilde av databasen som forblir uendret gjennom hele oppgaven.
Dette innebærer 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 finnes imidlertid et 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.
Ikke-repeterbar lesning vs phantom read
Ikke-repeterbar lesning 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 blitt 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 samtidig. 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
Awesome!
Completion rate improved to 4.55
Isolasjon. Repeatable Read- og Serializable-nivåer
Sveip for å vise menyen
Repeatable Read
Repeatable Read-isolasjon i databaser sikrer at når en transaksjon starter, får du et øyeblikksbilde av databasen som forblir uendret gjennom hele oppgaven.
Dette innebærer 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 finnes imidlertid et 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.
Ikke-repeterbar lesning vs phantom read
Ikke-repeterbar lesning 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 blitt 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 samtidig. 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!