Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Isolasjon. Repeatable Read og Serializable Nivåer | Acid
SQL-optimalisering og spørringsfunksjoner

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

Note
Les mer

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.

phantom_read

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;

question-icon

Koble isolasjonsnivåene med deres beskrivelser.

Read Uncommitted:
Read Committed:

Repeatable Read:

Serializable:

Klikk eller dra`n`slipp elementer og fyll inn de tomme feltene

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 1. Kapittel 7

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Seksjon 1. Kapittel 7
some-alt