Eristyvyys
Tietokantojen yhteydessä eristyvyys (isolation) tarkoittaa tietokantajärjestelmän kykyä hallita samanaikaisten transaktioiden tekemien muutosten näkyvyyttä. Se varmistaa, että transaktiot toimivat riippumattomasti toisistaan, estäen häiriöt ja säilyttäen tietojen eheyden.
SQL:ssä on 4 eristystasoa:
- read uncommitted;
- read committed;
- repeatable read;
- serializable.
Read uncommitted
Tämä on alin eristystaso, jossa transaktiot voivat nähdä muiden transaktioiden tekemät muutokset jo ennen niiden vahvistamista (commit). Tämä taso sallii likaiset luvut (dirty reads), eli transaktio voi lukea tietoja, joita toinen transaktio on muuttanut, mutta joita ei ole vielä vahvistettu.
Likaiset luvut
Toteutus
Transaktion eristystason määrittämiseksi voidaan käyttää seuraavaa komentoa kyselyssä:
-- Start transaction
BEGIN;
-- Set the isolation level for the transaction
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
/* Transaction query */
COMMIT;
-
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;: Tämä lauseke muuttaa nykyisen transaktion eristystason "Read Uncommitted" -tasolle, jolloin transaktio voi mahdollisesti lukea muiden vahvistamattomien transaktioiden muokkaamia tietoja; -
tätä komentoa tulee käyttää vain transaktiolohkon sisällä! Muussa tapauksessa sillä ei ole vaikutusta ja käytössä on oletuseristystaso.
Nykyisen eristystason voi tarkistaa seuraavalla komennolla:
SHOW TRANSACTION ISOLATION LEVEL;
Read committed
Read Committed -eristystaso varmistaa, että transaktio näkee vain muiden transaktioiden vahvistamat tiedot.
Tämä tarkoittaa, että muiden transaktioiden vahvistamattomat muutokset eivät ole näkyvissä Read Committed -eristystasolla toimiville transaktioille.
Tämän seurauksena se estää likaiset luvut sallimalla transaktion lukea vain vahvistettuja tietoja. Kuitenkin tällä tasolla esiintyy ongelmia ei-toistettavien lukujen (non-repeatable reads) kanssa.
Ei-toistettavat luvut
"Read committed" -eristystaso sallii ei-toistettavat luvut, koska se lukitsee lukuoperaation arvoihin, jotka ovat keskeneräisissä transaktioissa, mutta ei lukitse kirjoitusoperaatiota.
Tämän seurauksena voidaan kirjoittaa uutta dataa riviin, jota toinen transaktio parhaillaan lukee.
Kadonneet päivitykset
Koska kirjoituslukko puuttuu, read committed -eristystasolla esiintyy vielä yksi ongelma – kadonneet päivitykset.
Kadonneet päivitykset tapahtuvat, kun kaksi rinnakkaista transaktiota yrittää muuttaa samaa riviä. Tällöin myöhemmin vahvistettu transaktio korvaa muiden transaktioiden vahvistamat arvot.
Toteutus
Voimme myös määrittää tämän eristystason seuraavilla komennoilla:
-- Start transaction
BEGIN;
-- Set the isolation level for the session
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
/* Transaction query */
COMMIT;
On tärkeää huomata, että Read Committed on oletuseristystaso useimmissa tietokantahallintajärjestelmissä, minkä vuoksi sen määrittäminen voidaan usein jättää pois.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you explain the other isolation levels like Repeatable Read and Serializable?
What are the main differences between dirty reads, non-repeatable reads, and lost updates?
Can you provide examples of when to use each isolation level?
Mahtavaa!
Completion arvosana parantunut arvoon 4.55
Eristyvyys
Pyyhkäise näyttääksesi valikon
Tietokantojen yhteydessä eristyvyys (isolation) tarkoittaa tietokantajärjestelmän kykyä hallita samanaikaisten transaktioiden tekemien muutosten näkyvyyttä. Se varmistaa, että transaktiot toimivat riippumattomasti toisistaan, estäen häiriöt ja säilyttäen tietojen eheyden.
SQL:ssä on 4 eristystasoa:
- read uncommitted;
- read committed;
- repeatable read;
- serializable.
Read uncommitted
Tämä on alin eristystaso, jossa transaktiot voivat nähdä muiden transaktioiden tekemät muutokset jo ennen niiden vahvistamista (commit). Tämä taso sallii likaiset luvut (dirty reads), eli transaktio voi lukea tietoja, joita toinen transaktio on muuttanut, mutta joita ei ole vielä vahvistettu.
Likaiset luvut
Toteutus
Transaktion eristystason määrittämiseksi voidaan käyttää seuraavaa komentoa kyselyssä:
-- Start transaction
BEGIN;
-- Set the isolation level for the transaction
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
/* Transaction query */
COMMIT;
-
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;: Tämä lauseke muuttaa nykyisen transaktion eristystason "Read Uncommitted" -tasolle, jolloin transaktio voi mahdollisesti lukea muiden vahvistamattomien transaktioiden muokkaamia tietoja; -
tätä komentoa tulee käyttää vain transaktiolohkon sisällä! Muussa tapauksessa sillä ei ole vaikutusta ja käytössä on oletuseristystaso.
Nykyisen eristystason voi tarkistaa seuraavalla komennolla:
SHOW TRANSACTION ISOLATION LEVEL;
Read committed
Read Committed -eristystaso varmistaa, että transaktio näkee vain muiden transaktioiden vahvistamat tiedot.
Tämä tarkoittaa, että muiden transaktioiden vahvistamattomat muutokset eivät ole näkyvissä Read Committed -eristystasolla toimiville transaktioille.
Tämän seurauksena se estää likaiset luvut sallimalla transaktion lukea vain vahvistettuja tietoja. Kuitenkin tällä tasolla esiintyy ongelmia ei-toistettavien lukujen (non-repeatable reads) kanssa.
Ei-toistettavat luvut
"Read committed" -eristystaso sallii ei-toistettavat luvut, koska se lukitsee lukuoperaation arvoihin, jotka ovat keskeneräisissä transaktioissa, mutta ei lukitse kirjoitusoperaatiota.
Tämän seurauksena voidaan kirjoittaa uutta dataa riviin, jota toinen transaktio parhaillaan lukee.
Kadonneet päivitykset
Koska kirjoituslukko puuttuu, read committed -eristystasolla esiintyy vielä yksi ongelma – kadonneet päivitykset.
Kadonneet päivitykset tapahtuvat, kun kaksi rinnakkaista transaktiota yrittää muuttaa samaa riviä. Tällöin myöhemmin vahvistettu transaktio korvaa muiden transaktioiden vahvistamat arvot.
Toteutus
Voimme myös määrittää tämän eristystason seuraavilla komennoilla:
-- Start transaction
BEGIN;
-- Set the isolation level for the session
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
/* Transaction query */
COMMIT;
On tärkeää huomata, että Read Committed on oletuseristystaso useimmissa tietokantahallintajärjestelmissä, minkä vuoksi sen määrittäminen voidaan usein jättää pois.
Kiitos palautteestasi!