Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Eristys. Toistettava Luku ja Sarjoitustasot | Acid
SQL-optimointi ja kyselyominaisuudet

Eristys. Toistettava Luku ja Sarjoitustasot

Pyyhkäise näyttääksesi valikon

Repeatable Read

Repeatable Read -eristystaso tietokannoissa varmistaa, että kun aloitat tapahtuman, näet tietokannasta otetun tilannekuvan, joka pysyy samana koko tehtävän ajan.
Tämä tarkoittaa, että vaikka tietokantaan tehtäisiin muutoksia työskentelysi aikana, näet vain sen datan, joka oli olemassa tapahtuman alkaessa.
Repeatable Read -eristyksen alla tapahtumat pitävät luku-lukot kaikissa viittaamissaan riveissä ja kirjoituslukot riveissä, joita ne lisäävät, päivittävät tai poistavat. Tämä estää päivitysten katoamisen, likaiset ja ei-toistettavat luvut.
Kuitenkin yksi ongelma voi silti esiintyä tämän eristystason kanssa – phantom read.

Phantom read

Note
Lisätietoa

Phantom read tapahtuu, kun tapahtuma suorittaa kyselyn uudelleen ja löytää eri rivijoukot, jotka täyttävät alkuperäisen kyselyn suodatusehdon.

Esimerkiksi, jos tapahtuma hakee kaikki tilaukset, joiden kokonaissumma on yli $1000. Jos toinen tapahtuma lisää uuden tilauksen, joka täyttää tämän ehdon ensimmäisen ja toisen kyselyn suorituksen välillä, ensimmäinen tapahtuma havaitsee tämän uuden rivin toisella suorituskerralla, mikä johtaa phantom read -ilmiöön.

Phantom read voi tapahtua, kun yksi tapahtuma lukee dataa ja toinen tapahtuma lisää uusia tietueita tietokantaan. Tämän seurauksena voimme saada eri tulosjoukot kahdessa peräkkäisessä lukuoperaatiossa.

phantom_read

Ei-toistettava luku vs. haamuluku

Ei-toistettava luku tapahtuu, kun käyttäjän A suorittama sama kysely palauttaa eri arvot samalle riville peräkkäisissä luennoissa, tyypillisesti käyttäjän B tekemien muutosten vuoksi.

Haamuluku puolestaan tapahtuu, kun käyttäjän A suorittama sama kysely palauttaa eri rivijoukot peräkkäisissä luennoissa, vaikka yksittäisiä rivejä ei olisi päivitetty.

Voimme määrittää tämän eristystason SQL-kyselyssämme seuraavalla komennolla:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

Serializable

Serializable-eristystaso on korkein tietokantojen eristystaso, joka takaa tiukimman samanaikaisuuden hallinnan.
Tällä tasolla tapahtumat suoritetaan ikään kuin ne olisi käsitelty sarjallisesti, yksi kerrallaan, vaikka ne todellisuudessa voisivatkin olla käynnissä samanaikaisesti. Tämä varmistaa, että tapahtumien lopputulos on sama kuin jos ne olisi suoritettu jossain sarjallisessa järjestyksessä, säilyttäen johdonmukaisuuden ja estäen kaikki tunnetut samanaikaisuuden poikkeamat.

Huomio

Tämän eristystason käyttö voi johtaa suorituskyvyn heikkenemiseen lisääntyneen lukituksen vuoksi.

Voimme käyttää seuraavaa lauseketta asettaaksemme tämän eristystason SQL-kyselyssämme:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

question-icon

Yhdistä eristystasot niiden kuvauksiin.

Read Uncommitted:
Read Committed:

Repeatable Read:

Serializable:

Klikkaa tai vedä ja pudota esineitä ja täytä tyhjät kohdat

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 7

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 1. Luku 7
some-alt