2011. március 6., vasárnap

Izolációs szintek adatbázisokban

Adatbázisokkal kapcsolatban fontos megemlíteni, hogy a tranzakciók megbízhatóságát négy tulajdonág befolyásolja. Ezeket ACID tulajdonságoknak nevezik szaknyelven (ACID = Atomicity, Consistency, Isolation, Durability, azaz magyarul atomicitás, konzisztencia, izoláció és tartósság).

Aki adatbázisokkal foglalkozik, annak illik ismernie az izolációs szinteket. Az izolációs szint egy olyan tulajdonság, mely azt határozza meg, hogy az egyidejűleg futó adatbázis tranzakciók láthatják-e egymás változtatásait, illetve ha igen, akkor hogyan. A gyakorlatban minél magasabb az izolációs szint, annál nagyobb mértékben használ az adatbázis-kezelő zárolást (lock), azaz annál nagyobb a zárolásból eredő többletterhelés, valamint a holtpont kialakulásának (deadlock) a lehetősége is, viszont minél alacsonyabb az izolációs szint, annál inkább fordulhatnak elő bizonyos nemkívánatos jelenségek adatbázisból olvasáskor.

A négy izolációs szint (fentről lefelé csökkenő sorrendben):
  1. Serializable
  2. Repeatable reads
  3. Read uncommitted
  4. Read committed

Serializable

Ez a legmagasabb izolációs szint. Minden tranzakció teljesen izoláltan fut le, mintha egymás után hajtódnának végre. Az adatbázis-kezelő végrehajthat több tranzakciót is egyszerre, de csakis akkor, ha a soros feldolgozás látszata fenntartható, azaz ugyanazt az eredményt kapjuk, mintha a két vagy több tranzakció egymás után hajtódott volna végre.

  • az olvasási és írási zárolás a tranzakció végén szűnik meg
  • range lock (SELECT .. WHERE lekérdezések esetén) a phantom read elkerülésére (ld. lejjebb)

Repeatable reads

  • az írási és olvasási zárolás a tranzakció végén szűnik meg
  • nincs range lock → phantom read anomália előfordulhat

Read committed

  • az írási zárolás a tranzakció végén szűnik meg
  • az olvasási zárolás csak a SELECT művelet végéig tart → non-repeatable reads anomália előfordulhat (ld. lejjebb)
  • nincs range lock → phantom read anomália előfordulhat

Read uncommitted


Ez a legalacsonyabb izolációs szint.

  • dirty reads anomália is előfordulhat (ld. lejjebb)


Olvasási anomáliák


Phantom read

Ha egy tranzakció lefutásakor 2 azonos lekérdezés hajtódik végre egymás után és más eredménnyel térnek vissza, akkor azt phantom read-nek nevezzük. Ez akkor fordulhat elő, ha SELECT .. WHERE tartománylekérdezések esetén nem használunk tartomány zárolást (range lock), azaz T1 tranzakció lekérdez egy tartományt, majd a műveletet még egyszer végrehajtja egy tranzakción belül, de a kettő között T2 tranzakció olyan sorokat inzertál a T1 általá használ táblába,melyek kielégítik a WHERE feltételt, azaz beleesnek a tartományba.


Non-repeatable reads

Ez akkor fordulhat elő, ha egy T1 tranzakció végrehajt egy lekérdezést, de mielőtt az befejeződne (a COMMIT hívással), T2 tranzakció felülírja a T1 által olvasott sor(oka)t. A T1 tranzakció tehát a régi értékekről tud, de már újak vannak a táblában.
  • serializable / repeatable reads izolációs szinteken a régi értékeket kell visszakapni a T1 tranzakcióból
  • read committed / read uncommitted izolációs szinteken az adatbázis-kezelő visszaadhatja az új értéket is akár
Dirty reads

Ha egy T1 tranzakció olvashatja egy másik, T2 tranzakció által módosított adatokat, mielőtt a T2 befejeződne a COMMIT hívással, azt dirty read-nek nevezzük. Azaz, a tranzakciók még nem kommitált (azaz visszahívható) adatokat is olvashatnak az adatbázisból.

Összefoglalás

Izolációs szintek és anomáliák

Izolációs szint Dirty read Non-repeatable read Phantom read
Read uncommitted X X X
Non-repeatable read - X X
Repeatable read - - X
Serializable - - -

Izolációs szintek és a zárolási típusok

Izolációs szint Range lock Read lock Write lock
Read uncommitted - - -
Non-repeatable read - - X
Repeatable read - X X
Serializable X X X


Irodalom:
http://en.wikipedia.org/wiki/ACID
http://en.wikipedia.orgwiki/Isolation_level

1 megjegyzés:

  1. Video Games | Video Games | VICTORIA
    Video Games · Video Games. Video Game Design · youtube converter Video Games · Video Games. Video Games. Video Games. Video Games. Video Games. Video Games. Video Games. Video Games. Video Games. Video Games. Video Games. Video Games.

    VálaszTörlés