Mit eredményezhet az adatbázisok tranzakciós elkülönítési szintjének gyengülése?

Sziasztok. Vladislav Rodin felveszi a kapcsolatot. Jelenleg a High Workload Architect tanfolyam kurzusvezetője vagyok az OTUS-ban, és szoftverarchitektúra tanfolyamokat is tanítok.

A tanítás mellett, ahogy észrevetted, eredeti anyagot írok az OTUS bloghoz Habréról, és egybe akarok esni a mai cikkel, hogy egybeessen a kurzus elindításával "PostgreSQL", amelyre már most is lehet jelentkezni.

Mit eredményezhet az adatbázisok tranzakciós elkülönítési szintjének gyengülése?

Bevezetés

В utoljára beszéltünk arról, hogy az adatbázisokban történő tranzakciók két probléma megoldását szolgálják: a hibatűrés és az adatokhoz való hozzáférés biztosítása versenykörnyezetben. E feladatok teljes körű végrehajtásához a tranzakciónak ACID tulajdonságokkal kell rendelkeznie. Ma részletesen beszélünk a levélről én (elszigetelődés) ebben a rövidítésben.

Szigetelés

Az izoláció megoldja az adatokhoz való hozzáférés problémáját versenykörnyezetben, lényegében védelmet nyújtva a versenyfeltételekkel szemben. Ideális esetben az elkülönítés a szerializációt jelenti, amely egy olyan tulajdonság, amely biztosítja, hogy a párhuzamos tranzakciók eredménye ugyanaz legyen, mintha egymást követően hajtanák végre azokat. A fő probléma ezzel a tulajdonsággal az, hogy műszakilag nagyon nehéz biztosítani, és ennek következtében jelentős hatással van a rendszer teljesítményére. Ez az oka annak, hogy az elszigeteltség gyakran gyengül, elfogadva bizonyos anomáliák kockázatát, amelyekről az alábbiakban lesz szó. Az egyes anomáliák előfordulásának lehetősége pontosan jellemzi a tranzakciós elszigeteltség szintjét.

A legismertebb anomáliák: piszkos olvasás, megismételhetetlen olvasás, fantomolvasás, de valójában van még 5: piszkos írás, kurzor elveszett frissítés, elveszett frissítés, olvasási ferde, írási ferdeség.

Piszkos írás

Az anomália lényege, hogy a tranzakciók felülírhatják a nem véglegesített adatokat.

Mit eredményezhet az adatbázisok tranzakciós elkülönítési szintjének gyengülése?

Ez az anomália nem csak azért veszélyes, mert az adatok ütközhetnek mindkét tranzakció végrehajtása után (mint a képen), hanem azért is, mert az atomitás sérül: mivel engedélyezzük a nem véglegesített adatok felülírását, nem világos, hogyan lehet visszaállítani az egyik tranzakciót anélkül, hogy az a másikat érintené. .

Az anomália egészen egyszerűen kezelhető: a rögzítés megkezdése előtt zárat rögzítünk a rekordra, megtiltva más tranzakcióknak a rekord megváltoztatását a zár eltávolításáig.

Piszkos olvasmány

A piszkos olvasás a nem véglegesített adatok olvasását jelenti.

Mit eredményezhet az adatbázisok tranzakciós elkülönítési szintjének gyengülése?

Problémák akkor merülnek fel, ha a minta alapján kell cselekvéseket vagy döntéseket hozni.

Az anomália kijavításához olvasási zárat csatlakoztathat, de ez nagyban befolyásolja a teljesítményt. Sokkal egyszerűbb azt mondani, hogy egy visszagörgetési tranzakcióhoz az adatok kezdeti állapotát (rögzítés megkezdése előtt) el kell menteni a rendszerben. Miért nem olvasol onnan? Elég olcsó ahhoz, hogy a legtöbb adatbázis alapértelmezés szerint eltávolítsa a piszkos olvasást.

Elveszett frissítés

Az elveszett frissítés elveszett frissítéseket jelent, és a fordítás nagyon pontosan tükrözi a probléma lényegét:

Mit eredményezhet az adatbázisok tranzakciós elkülönítési szintjének gyengülése?

Valójában a T2 tranzakció eredménye megfordult. Ez a helyzet explicit vagy implicit írási zárolással korrigálható. Vagyis vagy egyszerűen frissítjük a rekordot, és akkor implicit zárolás következik be, vagy végrehajtjuk válassza ki a frissítéshez, ami olvasási és írási zárolást okoz. Felhívjuk figyelmét, hogy egy ilyen művelet meglehetősen veszélyes: „ártatlan” leolvasásunkkal blokkoljuk a többi leolvasást. Egyes adatbázisok nagyobb biztonságot nyújtanak válassza ki a megosztáshoz, amely lehetővé teszi az adatok olvasását, de nem módosítását.

A kurzor frissítése elveszett

A finomabb vezérlés érdekében a bázisok más eszközöket is kínálhatnak, például kurzort. A kurzor olyan struktúra, amely sorokat tartalmaz, és lehetővé teszi az iterációt felettük. deklarálja a kurzor_nevet a select_utasításhoz. A kurzor tartalmát a kiválasztás írja le.

Miért van szüksége kurzorra? A tény az, hogy egyes adatbázisok zárolást kínálnak a Select által kiválasztott összes rekordon (olvasási stabilitás), vagy csak azon rekordon, amelyen a kurzor éppen található (kurzorstabilitás). A kurzor stabilitásával rövid zárolás valósul meg, amely lehetővé teszi a zárolások számának csökkentését, ha nagy adatmintán iterálunk. Ezért az elveszett frissítési anomáliát a kurzor külön elkülöníti.

Nem megismételhető olvasmány

Nem megismételhető olvasás, hogy tranzakciónk végrehajtása során ugyanannak a rekordnak 2 egymást követő leolvasása eltérő eredményhez vezet, mert e két olvasás között egy másik tranzakció közbelépett, megváltoztatta az adatainkat és elkötelezte magát.

Mit eredményezhet az adatbázisok tranzakciós elkülönítési szintjének gyengülése?

Ez miért is probléma? Képzelje el, hogy a képen látható T2 tranzakció célja az összes olyan áru kiválasztása, amelynek ára kevesebb, mint 150 USD. Valaki más frissítette az árat 200 dollárra. Így a beépített szűrő nem működött.

Ezek az anomáliák megszűnnek, ha kétfázisú reteszelést adnak hozzá, vagy ha az MVCC mechanizmust használják, amit külön szeretnék tárgyalni.

Fantomolvasás

A fantom egy másik tranzakció által hozzáadott adatok beolvasása.

Mit eredményezhet az adatbázisok tranzakciós elkülönítési szintjének gyengülése?

Példaként megfigyelhetjük a legolcsóbb termék helytelen kiválasztását, amikor ez az anomália előfordul.

A fantomolvasástól már elég nehéz megszabadulni. A rendszeres blokkolás nem elég, mert nem tudjuk letiltani azt, ami még nem létezik. A 2PL rendszerek prediktív zárolást használnak, míg az MVCC rendszerek rendelkezik egy tranzakcióütemezővel, amely visszagörgeti azokat a tranzakciókat, amelyeket egy betét megzavarhat. Mind az első, mind a második mechanizmus meglehetősen nehéz.

Olvasás ferdén

Olvasási ferdeség akkor fordul elő, ha több táblával dolgozunk, amelyek tartalmának következetesen változnia kell.

Tegyük fel, hogy vannak táblázataink, amelyek a bejegyzéseket és azok metainformációit ábrázolják:

Mit eredményezhet az adatbázisok tranzakciós elkülönítési szintjének gyengülése?

Az egyik tranzakció kiolvassa a táblákat, a másik módosítja azokat:

Mit eredményezhet az adatbázisok tranzakciós elkülönítési szintjének gyengülése?

A T1 tranzakció eredményeképpen a bejegyzés címe = Good, és updated_by = T2, ami valamiféle következetlenség.

Valójában ez egy nem megismételhető olvasmány, de több táblázat részeként.

Ennek kijavításához a T1 zárakat helyezhet el az összes olvasott soron, ami megakadályozza, hogy a T2 tranzakció módosítsa az információkat. MVCC esetén a T2 tranzakció törlésre kerül. Ez az anomália elleni védelem fontossá válhat, ha kurzorokat használunk.

Írás ferde

Ezt az anomáliát egy példával is könnyebb megmagyarázni: tegyük fel, hogy a rendszerünkben legalább egy orvosnak kell ügyeletet lennie, de mindkét orvos úgy döntött, hogy lemond az ügyeletéről:

Mit eredményezhet az adatbázisok tranzakciós elkülönítési szintjének gyengülése?

Mit eredményezhet az adatbázisok tranzakciós elkülönítési szintjének gyengülése?

Az anomália azt jelentette, hogy egyik orvos sem lesz szolgálatban. Miért történt ez? Mivel a tranzakció olyan feltételt ellenőriz, amelyet egy másik tranzakció megsérthet, és az elszigeteltség miatt nem láttuk ezt a változást.

Ez ugyanaz a meg nem ismételhető olvasmány. Alternatív megoldásként a kiválasztottak zárakat helyezhetnek el ezeken a rekordokon.

Az írási ferdeség és az olvasási ferdeség az előző anomáliák kombinációi. Megfontolható az írási ferdeség, ami lényegében egy fantomolvasás. Vegyünk egy táblázatot, amely tartalmazza az alkalmazottak nevét, fizetését és a projektet, amelyen dolgoznak:

Mit eredményezhet az adatbázisok tranzakciós elkülönítési szintjének gyengülése?

Mit eredményezhet az adatbázisok tranzakciós elkülönítési szintjének gyengülése?

Ennek eredményeként a következő képet kapjuk: minden vezető úgy gondolta, hogy a változtatásuk nem vezet költségvetési túllépéshez, ezért személyi változtatásokat hajtottak végre, amelyek együttesen költségtúllépéshez vezettek.

A probléma oka pontosan ugyanaz, mint a fantomolvasásnál.

Álláspontja

Az adatbázisban a tranzakció-izoláció szintjének enyhítése kompromisszum a biztonság és a teljesítmény között, ennek a szintnek a megválasztását a vállalkozást fenyegető lehetséges kockázatok alapján kell megközelíteni, ha bizonyos anomáliák lépnek fel.

Tudjon meg többet a tanfolyamról.

Forrás: will.com

Hozzászólás