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
Bevezetés
В
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.
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.
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:
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.
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.
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:
Az egyik tranzakció kiolvassa a táblákat, a másik módosítja azokat:
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:
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:
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.
Forrás: will.com