Reikalavimai: Yra daug priežasčių, kodėl SQL serverio duomenų bazė sukelia aklavietes, gamyboje kiekvienas gali susidurti su aklavietės problemomis, o konkreti priežastis gali būti nustatyta ne pagal neįprastą informaciją apie programos aklavietes, todėl būtina naudoti plėtinio įvykius SQL serveryje, kad būtų galima stebėti aklavietės problemas ir įrašyti konkrečią informaciją apie aklavietę.
Išplėstinė įvykių apžvalga
Išplėstiniai įvykiai yra lengva našumo stebėjimo funkcija, leidžianti vartotojams rinkti duomenis, reikalingus problemoms stebėti ir spręsti. Ši funkcija leidžia peržiūrėti išsamią informaciją apie duomenų modulio vidines operacijas našumo stebėjimo ir problemų sprendimo tikslais.
Naudodami išplėstinių įvykių (XEvents) architektūrą, vartotojai gali naudoti tiek duomenų, kiek jiems reikia SQL serverio, "Azure SQL" duomenų bazės ir "Azure SQL Managed Instance" našumui stebėti, identifikuoti arba šalinti. Išplėstiniai įvykiai yra labai konfigūruojami, lengvi ir gerai keičiami.
Nuoroda:
Hipersaito prisijungimas matomas.
Hipersaito prisijungimas matomas.
Aklavietės priežastys
Aklavietes sukelia konkuruojantys sutapimo užraktai duomenų bazėje, dažniausiai atliekant kelių veiksmų operacijas. Kiekviena vartotojo sesija gali turėti vieną ar daugiau užduočių, kurių kiekviena gali gauti arba laukti, kol gaus įvairius išteklius. Toliau nurodyti išteklių tipai gali sukelti blokavimą ir galiausiai sukelti aklavietę.
- Užraktai: užraktai, laukiantys išteklių, pvz., objektų, puslapių, eilučių, metaduomenų ir programų, gali sukelti aklavietę. Pavyzdžiui, operacija T1 turi bendrą užraktą (S užraktą) r1 eilutėje ir laukia, kol gaus išskirtinį užraktą (X užraktą) r2 eilutei. Operacija T2 turi bendrą užraktą (S užraktą) r2 eilutėje ir laukia, kol gaus išskirtinį užraktą (X užraktą) r1 eilutei. Dėl to susidaro užrakto ciklas, kuriame T1 ir T2 laukia, kol vienas kitas išlaisvins užrakintą resursą.
- Darbuotojo gijos: užduotys, esančios eilėje dėl galimų darbuotojų gijų, gali sukelti aklavietę. Jei eilėje esančioje užduotyje yra išteklius, kuris blokuoja visas darbuotojo gijas, tai sukels aklavietę. Pavyzdžiui, po sesijos S1 pradeda operaciją ir gauna bendrą užraktą (S-lock) linijai r1, ji pereina į miego režimą. Aktyvus seansas, veikiantis visose galimose darbininkų gijose, bando gauti išskirtinį užraktą (X-lock) linijai r1. Kadangi seansas S1 negali gauti darbininko gijos, jis negali patvirtinti operacijos ir atlaisvinti eilutės r1 užrakto. Tai sukels aklavietę.
- Atmintis: Aklavietė gali įvykti, kai vienu metu užklausa laukia, kol gaus atmintį, o šiuo metu turimos atminties nepakanka jos poreikiams. Pavyzdžiui, dvi lygiagrečios užklausos (Q1 ir Q2) vykdomos kaip vartotojo nustatytos funkcijos, atitinkamai įgyjant 10 MB ir 20 MB atminties. Jei kiekvienai užklausai reikia 30 MB, o bendra laisva atmintis yra 20 MB, Q1 ir Q2 turi palaukti, kol vienas kitas atlaisvins atmintį, o tai sukels aklavietę.
- Lygiagrečios užklausos ir vykdymo ištekliai: apdorojimo koordinatoriai, generatoriai arba vartotojų gijos, paprastai susijusios su perjungiamaisiais prievadais, gali blokuoti vienas kitą, kai juose yra bent vienas procesas, kuris nėra lygiagrečios užklausos dalis, todėl atsiranda aklavietė. Be to, kai pradedama vykdyti lygiagreti užklausa, SQL serveris nustato lygiagretumo laipsnį arba darbininkų gijų skaičių pagal esamą darbo krūvį. Aklavietė gali įvykti, jei netikėtai pasikeičia sistemos darbo krūvis, pvz., kai serveryje pradedama vykdyti nauja užklausa arba kai sistemoje baigiasi darbo gijos.
- Kelių veiklos rezultatų rinkinio (MARS) ištekliai: šie ištekliai naudojami kelių veiklos užklausų kryžminiam vykdymui pagal MARS valdyti.
Nuoroda:
Hipersaito prisijungimas matomas.
Aklavietės išplėstinis įvykių registravimas
Sukurkite plėtinio įvykį, kad įrašytumėte aklavietės informaciją naudodami šią komandą:
Aklavietės įvykio seanso pradžia
Įvykio seanso sustabdymas
Įvykio seanso ištrynimas
Užklausos įvykio seanso duomenys
Bandymo aklavietės
Sukurkite naują Tab1 lentelę testavimui, sukurkite du naujus vykdymo langus ir atitinkamai vykdykite šias komandas:
Aklavietė įvyksta taip:
Operacija (proceso ID 68) su kitu procesu yra užblokuota užrakintame ištekliuje ir buvo pasirinkta kaip aklavietės auka. Paleiskite operaciją iš naujo. Operacija (proceso ID 68) buvo užblokuota užrakto ištekliuose su kitu procesu ir buvo pasirinkta kaip aklavietės auka. Paleiskite operaciją iš naujo.
Peržiūrėkite įvykio seanso duomenis, kaip parodyta šiame paveikslėlyje:
Išsamūs XML duomenys yra tokie:
(Pabaiga)
|