Isolasjon. Repeatable Read og Serializable Nivåer
Sveip for å vise menyen
Repeatable Read
Isolasjonsnivået Repeatable Read i databaser sikrer at når en transaksjon starter, 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 reads oppstår når en transaksjon kjører en spørring på nytt og finner forskjellige sett med rader som oppfyller den opprinnelige spørringens filterbetingelse.
For eksempel, anta at en transaksjon henter alle ordrer med totalbeløp over $1000. Hvis en annen transaksjon setter inn en ny ordre med et totalbeløp som oppfyller denne betingelsen mellom første og andre kjøring av spørringen, vil den første transaksjonen observere denne ekstra raden ved andre kjøring, noe som resulterer i en 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 resultater for to påfølgende lesetransaksjoner.
Ikke-repeterbar lesing vs fantomlesing
Ikke-repeterbar lesing oppstår når samme spørring utført av Bruker A returnerer forskjellige verdier for samme rad mellom påfølgende lesinger, vanligvis på grunn av endringer gjort av Bruker B.
Fantomlesing, derimot, skjer når samme spørring utført av Bruker A returnerer forskjellige sett med rader mellom påfølgende lesinger, selv om de individuelle radene ikke nødvendigvis har 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-isolasjonsnivået er det høyeste nivået av isolasjon i databaser, og sikrer den strengeste formen for samtidighetskontroll.
På dette nivået blir transaksjoner utført som om de behandles seriell, é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 seriell 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