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):
- Serializable
- Repeatable reads
- Read uncommitted
- 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
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
Video Games | Video Games | VICTORIA
VálaszTörlésVideo 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.