Ni nini kinaweza kusababisha kutokana na kudhoofisha kiwango cha kutengwa kwa shughuli katika hifadhidata?

Salaam wote. Vladislav Rodin anawasiliana. Kwa sasa mimi ni Kiongozi wa Kozi ya kozi ya Mbunifu wa Uzito wa Juu wa Kazi huko OTUS na pia ninafundisha kozi za usanifu wa programu.

Mbali na kufundisha, kama umeona, ninaandika nyenzo asili kwa blogi ya OTUS kwenye HabrΓ© na ninataka sanjari na nakala ya leo ili sanjari na uzinduzi wa kozi hiyo. "PostgreSQL", ambayo imefunguliwa kwa uandikishaji sasa hivi.

Ni nini kinaweza kusababisha kutokana na kudhoofisha kiwango cha kutengwa kwa shughuli katika hifadhidata?

Utangulizi

Π’ mara ya mwisho tulizungumza juu ya ukweli kwamba shughuli katika hifadhidata hutumikia kutatua shida mbili: kuhakikisha uvumilivu wa makosa na ufikiaji wa data katika mazingira ya ushindani. Ili kufanya kazi hizi kikamilifu, shughuli lazima iwe na mali ya ACID. Leo tutazungumza kwa undani juu ya barua Mimi (kujitenga) katika ufupisho huu.

Insulation

Kutengwa hutatua tatizo la kupata data katika mazingira ya ushindani, kimsingi kutoa ulinzi kutoka kwa hali ya mbio. Kwa hakika, kutengwa kunamaanisha ujumuishaji, ambayo ni mali ambayo inahakikisha kwamba matokeo ya kutekeleza miamala sambamba ni sawa na kama yalitekelezwa kwa mfuatano. Tatizo kuu la mali hii ni kwamba ni vigumu sana kutoa kiufundi na, kwa sababu hiyo, ina athari kubwa juu ya utendaji wa mfumo. Ndiyo maana kujitenga mara nyingi kunadhoofishwa, kukubali hatari za makosa fulani, ambayo yatajadiliwa hapa chini. Uwezekano wa hitilafu fulani kutokea huonyesha kwa usahihi kiwango cha kutengwa kwa shughuli.

Makosa yanayojulikana zaidi ni: kusoma chafu, kusoma bila kurudiwa, kusoma kwa phantom, lakini kwa kweli kuna 5 zaidi: uandishi chafu, sasisho lililopotea la mshale, sasisho lililopotea, soma skew, andika skew.

Kuandika chafu

Kiini cha hitilafu ni kwamba miamala inaweza kubatilisha data ambayo haijatumwa.

Ni nini kinaweza kusababisha kutokana na kudhoofisha kiwango cha kutengwa kwa shughuli katika hifadhidata?

Hitilafu hii ni hatari si tu kwa sababu data inaweza kukinzana baada ya kufanya miamala yote miwili (kama ilivyo kwenye picha), lakini pia kwa sababu atomicity imekiukwa: kwa kuwa tunaruhusu data isiyo na dhamana kuandikwa, haijulikani jinsi ya kurudisha nyuma muamala mmoja bila kuathiri mwingine. .

Ukosefu huo unaweza kutibiwa kwa urahisi kabisa: tunaambatisha kufuli kwenye rekodi kabla ya kuanza kurekodi, tukikataza shughuli zingine za kubadilisha rekodi hadi kufuli iondolewe.

Kusoma kwa uchafu

Usomaji mchafu unamaanisha kusoma data ambayo hujajitolea.

Ni nini kinaweza kusababisha kutokana na kudhoofisha kiwango cha kutengwa kwa shughuli katika hifadhidata?

Matatizo hutokea wakati hatua au maamuzi yanahitajika kufanywa kulingana na sampuli.

Ili kurekebisha hitilafu, unaweza kuambatisha kufuli ya kusoma, lakini hii itaathiri sana utendaji. Ni rahisi zaidi kusema kwamba kwa shughuli ya kurejesha, hali ya awali ya data (kabla ya kuanza kurekodi) lazima ihifadhiwe kwenye mfumo. Kwa nini usisome kutoka hapo? Ni ghali vya kutosha kwamba hifadhidata nyingi huondoa chafu iliyosomwa kwa chaguo-msingi.

Sasisho lililopotea

Usasisho uliopotea unamaanisha masasisho yaliyopotea, na tafsiri inaonyesha kwa usahihi kiini cha tatizo:

Ni nini kinaweza kusababisha kutokana na kudhoofisha kiwango cha kutengwa kwa shughuli katika hifadhidata?

Kwa kweli, matokeo ya shughuli T2 yalibadilishwa. Hali hii inaweza kusahihishwa kwa kufuli za maandishi wazi au zisizo wazi. Hiyo ni, tunasasisha rekodi kwa urahisi, na kisha kufuli isiyo wazi hutokea, au tunafanya chagua kwa sasisho, na kusababisha kufuli ya kusoma na kuandika kutokea. Tafadhali kumbuka kuwa operesheni kama hiyo ni hatari sana: kwa usomaji wetu "wasio na hatia", tunazuia usomaji mwingine. Baadhi ya hifadhidata hutoa salama zaidi chagua kwa kushiriki, kuruhusu data kusomwa lakini isirekebishwe.

Mshale umepoteza sasisho

Kwa udhibiti bora, besi zinaweza kutoa zana zingine, kama vile kishale. Mshale ni muundo ambao una seti ya safu na hukuruhusu kurudia juu yao. tangaza cursor_name kwa select_statement. Yaliyomo kwenye mshale yanaelezewa na chaguo.

Kwa nini unahitaji mshale? Ukweli ni kwamba baadhi ya hifadhidata hutoa lock kwenye rekodi zote zilizochaguliwa kwa kuchagua (kusoma utulivu), au tu kwenye rekodi ambayo mshale iko sasa (utulivu wa mshale). Kwa uthabiti wa kishale, kufuli fupi hutekelezwa, ambayo huturuhusu kupunguza idadi ya kufuli ikiwa tutarudia sampuli kubwa ya data. Kwa hivyo, hitilafu ya sasisho iliyopotea imetengwa kando kwa mshale.

Usomaji usioweza kurudiwa

Usomaji usioweza kurudiwa ni kwamba wakati wa utekelezaji wa shughuli yetu, usomaji 2 mfululizo wa rekodi sawa utasababisha matokeo tofauti, kwa sababu muamala mwingine uliingilia kati ya usomaji huu wawili, ulibadilisha data yetu na ukafanywa.

Ni nini kinaweza kusababisha kutokana na kudhoofisha kiwango cha kutengwa kwa shughuli katika hifadhidata?

Kwa nini hii ni shida hata? Hebu fikiria kuwa lengo la muamala T2 kwenye picha ni kuchagua bidhaa zote ambazo bei yake ni chini ya 150 USD. Mtu mwingine alisasisha bei hadi $200. Kwa hivyo, chujio kilichowekwa hakikufanya kazi.

Hitilafu hizi hukoma kutokea wakati maingiliano ya awamu mbili yanaongezwa au wakati utaratibu wa MVCC unatumiwa, ambao ningependa kujadili tofauti.

Phantom ilisoma

Phantom ni usomaji wa data ambayo iliongezwa na shughuli nyingine.

Ni nini kinaweza kusababisha kutokana na kudhoofisha kiwango cha kutengwa kwa shughuli katika hifadhidata?

Kwa mfano, tunaweza kuona uteuzi usio sahihi wa bidhaa ya bei nafuu wakati hitilafu hii inatokea.

Kuondoa usomaji wa phantom tayari ni ngumu sana. Kuzuia mara kwa mara haitoshi, kwa sababu hatuwezi kuzuia kitu ambacho bado hakipo. Mifumo ya 2PL hutumia kufuli kwa utabiri, ilhali mifumo ya MVCC ina kipanga shughuli ambacho hurejesha malipo ambayo yanaweza kukatizwa na kipengee. Njia zote za kwanza na za pili ni nzito sana.

Soma skew

Soma skew hutokea tunapofanya kazi na meza kadhaa, yaliyomo ambayo lazima yabadilike mara kwa mara.

Wacha tuseme tunayo jedwali zinazowakilisha machapisho na habari zao za meta:

Ni nini kinaweza kusababisha kutokana na kudhoofisha kiwango cha kutengwa kwa shughuli katika hifadhidata?

Muamala mmoja husoma kutoka kwa jedwali, nyingine huzirekebisha:

Ni nini kinaweza kusababisha kutokana na kudhoofisha kiwango cha kutengwa kwa shughuli katika hifadhidata?

Kama matokeo ya shughuli T1, chapisho lina kichwa = Nzuri, na updated_by = T2, ambayo ni aina fulani ya kutofautiana.

Kwa kweli, hii ni usomaji usioweza kurudiwa, lakini kama sehemu ya meza kadhaa.

Ili kurekebisha hili, T1 inaweza kuweka kufuli kwenye safu zote ambazo itasoma, ambayo itazuia shughuli ya T2 kubadilisha habari. Katika kesi ya MVCC, shughuli ya T2 itaghairiwa. Ulinzi dhidi ya hitilafu hii inaweza kuwa muhimu ikiwa tutatumia vishale.

Andika skew

Ukosefu huu pia ni rahisi kuelezea kwa mfano: tuseme kwamba katika mfumo wetu angalau daktari mmoja anapaswa kuwa zamu, lakini madaktari wote wawili waliamua kughairi wajibu wao:

Ni nini kinaweza kusababisha kutokana na kudhoofisha kiwango cha kutengwa kwa shughuli katika hifadhidata?

Ni nini kinaweza kusababisha kutokana na kudhoofisha kiwango cha kutengwa kwa shughuli katika hifadhidata?

Ukosefu huo ulimaanisha kwamba hakuna daktari hata mmoja ambaye angekuwa zamu. Kwa nini hili lilitokea? Kwa sababu muamala ulikuwa ukikagua hali ambayo inaweza kukiukwa na muamala mwingine, na kwa sababu ya kutengwa hatukuona mabadiliko haya.

Huu ni usomaji uleule usioweza kurudiwa. Vinginevyo, waliochaguliwa wanaweza kuweka kufuli kwenye rekodi hizi.

Andika skew na usome skew ni mchanganyiko wa makosa yaliyotangulia. Unaweza kufikiria kuandika skew, ambayo kimsingi ni usomaji wa phantom. Fikiria jedwali ambalo lina majina ya wafanyikazi, mishahara yao, na mradi wanaofanya kazi:

Ni nini kinaweza kusababisha kutokana na kudhoofisha kiwango cha kutengwa kwa shughuli katika hifadhidata?

Ni nini kinaweza kusababisha kutokana na kudhoofisha kiwango cha kutengwa kwa shughuli katika hifadhidata?

Kwa hivyo, tunapata picha ifuatayo: kila meneja alifikiri kuwa mabadiliko yao hayangesababisha kupita kwenye bajeti, kwa hivyo walifanya mabadiliko ya wafanyikazi ambayo kwa pamoja yalisababisha kuongezeka kwa gharama.

Sababu ya tatizo ni sawa na katika kusoma phantom.

Matokeo

Kupunguza kiwango cha utengaji wa muamala katika hifadhidata ni maelewano kati ya usalama na utendakazi; uchaguzi wa kiwango hiki unapaswa kushughulikiwa kulingana na hatari zinazoweza kutokea kwa biashara ikiwa hitilafu fulani zitatokea.

Jifunze zaidi kuhusu kozi.

Chanzo: mapenzi.com

Kuongeza maoni