Zahteve: Obstaja veliko razlogov, zakaj baza podatkov SQL Server povzroča zastoje; v produkciji se lahko vsi srečajo s težavami z zastoji, in specifičen vzrok morda ni mogoče najti zgolj na podlagi nenavadnih informacij o zastojih v aplikacijah, zato je potrebno uporabiti dogodke razširitev v SQL Serverju za sledenje težavam z zastoji in beleženje podrobnosti, kdaj se zastoji pojavijo.
Razširjen pregled dogodka
Extended Events je lahka funkcija za spremljanje zmogljivosti, ki uporabnikom omogoča zbiranje podatkov, ki jih potrebujejo za spremljanje in reševanje težav. Ta funkcija vam omogoča ogled podrobnosti o notranjem delovanju podatkovnega pogona za spremljanje zmogljivosti in reševanje problemov.
Z arhitekturo Extended Events (XEvents) lahko uporabniki uporabijo toliko ali manj podatkov, kolikor potrebujejo, za spremljanje, prepoznavanje ali odpravljanje težav z zmogljivostjo SQL Serverja, Azure SQL Database in Azure SQL Managed Instance. Razširjeni dogodki so zelo nastavljivi, lahki in dobro razširljivi.
Referenčni:
Prijava do hiperpovezave je vidna.
Prijava do hiperpovezave je vidna.
Vzroki zastojev
Zastoji nastanejo zaradi konkurenčnih sočasnih zaklepov v podatkovni bazi, običajno pri večstopenjskih transakcijah. Vsaka uporabniška seja ima lahko eno ali več nalog, ki tečejo v njenem imenu, pri čemer lahko vsaka naloga pridobi ali počaka na pridobitev različnih virov. Naslednje vrste virov lahko povzročijo blokado in sčasoma povzročijo zastoj.
- Ključavnice: Ključavnice, ki čakajo na pridobitev virov, kot so objekti, strani, vrstice, metapodatki in aplikacije, lahko povzročijo zastoje. Na primer, transakcija T1 ima skupno zaklepanje (S ključavnico) na vrstici r1 in čaka, da dobi ekskluzivno zaklepanje (X ključavnico) za vrstico r2. Transakcija T2 ima deljeno ključavnico (S ključavnico) na vrstici r2 in čaka, da dobi ekskluzivno ključavnico (X ključavnico) za vrstico r1. To povzroči zanko zaklepanja, kjer tako T1 kot T2 čakata, da drug drugi sprostita zaklenjeni vir.
- Delavske niti: Čakanje nalog za razpoložljive delavske niti lahko povzroči zastoje. Če ima naloga v vrsti vir, ki blokira vse delovne niti, bo prišlo do zastoja. Na primer, ko seja S1 začne transakcijo in pridobi skupno zaklepanje (S-zaklep) za vrstico r1, gre v stanje spanja. Aktivna seja, ki teče na vseh razpoložljivih delavskih nitih, poskuša pridobiti ekskluzivno zaklepanje (X-ključavnico) za vrstico r1. Ker seja S1 ne more dobiti delovne niti, ne more potrditi transakcije in sprostiti zaklepa na vrstici r1. To bo povzročilo zastoj.
- Pomnilnik: Zastoj se lahko zgodi, ko sočasna zahteva čaka na pridobitev pomnilnika in trenutno razpoložljivi pomnilnik ni dovolj za njene potrebe. Na primer, dve sočasni poizvedbi (Q1 in Q2) se izvajata kot uporabniško definirani funkciji, ki pridobijo 10 MB oziroma 20 MB pomnilnika. Če vsaka poizvedba zahteva 30 MB in je skupni razpoložljivi pomnilnik 20 MB, morata Q1 in Q2 počakati, da se sprostita pomnilnik, kar povzroči zastoj.
- Paralelno poizvedovanje in viri, povezani z izvajanjem: Koordinatorji obdelave, generatorji ali potrošniške niti, običajno povezane s preklopljenimi vrati, se lahko med seboj blokirajo, kadar vsebujejo vsaj en proces, ki ni del vzporedne poizvedbe, kar povzroči zastoje. Poleg tega, ko se začne izvajanje vzporednega poizvedbe, SQL Server določi stopnjo vzporednosti oziroma število delovnih niti glede na trenutno delovno obremenitev. Zastoj se lahko zgodi, če pride do nepričakovane spremembe v sistemski obremenitvi, na primer, ko se na strežniku začne izvajati nova poizvedba ali ko sistemu zmanjka delovnih niti.
- Viri Multiple Activity Outcome Set (MARS): Ti viri se uporabljajo za nadzor navzkrižnega izvajanja več zahtevkov za aktivnosti v okviru MARS.
Referenčni:
Prijava do hiperpovezave je vidna.
Podaljšano beleženje dogodkov zaradi zastoja
Ustvarite dogodek razširitve za beleženje informacij o zastoju z naslednjim ukazom:
Začni sejo zastoja
Ustavi sejo dogodka
Izbriši sejo dogodka
Poizvedba o podatkih seje dogodkov
Testni zastoji
Ustvarite novo tabelo Tab1 za testiranje, ustvarite dve novi okni za izvajanje in izvedite naslednje ukaze:
Zastoj pride na naslednji način:
Transakcija (ID procesa 68) z drugim procesom je zaklenjena na zaklenjenem viru in je bila izbrana kot žrtev zastoja. Prosim, ponovno zaženite transakcijo. Transakcija (ID procesa 68) je bila zaklenjena na zaklepnih virih z drugim procesom in je bila izbrana kot žrtev zastoja. Ponovno zaženi transakcijo.
Oglejte si podatke o seji dogodkov, kot je prikazano na naslednji sliki:
Podrobni XML podatki so naslednji:
(Konec)
|