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
Avanserte Teknikker i SQL

bookIsolasjon. 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;

question-icon

Koble isolasjonsnivåene til deres beskrivelser.

Read Uncommitted:
Read Committed:

Repeatable Read:

Serializable:

Click or drag`n`drop items and fill in the blanks

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

Suggested prompts:

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

bookIsolasjon. 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;

question-icon

Koble isolasjonsnivåene til deres beskrivelser.

Read Uncommitted:
Read Committed:

Repeatable Read:

Serializable:

Click or drag`n`drop items and fill in the blanks

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 1. Kapittel 7
some-alt