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
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.
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;
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme