Požiadavky: Existuje mnoho dôvodov, prečo databáza SQL Server spôsobuje zablokovanie, v produkcii sa môže každý stretnúť s problémami so zablokovaním a konkrétna príčina nemusí byť lokalizovaná len na základe abnormálnych informácií o zablokovaní aplikácií, preto je potrebné použiť rozšírenie udalostí v SQL Serveri na sledovanie problémov so zablokovaním a zaznamenávanie konkrétnych detailov, kedy k nim dôjde.
Rozšírený prehľad podujatia
Extended Events je ľahká funkcia monitorovania výkonu, ktorá umožňuje používateľom zhromažďovať údaje potrebné na monitorovanie a riešenie problémov. Táto funkcia vám umožňuje zobraziť detaily o interných operáciách dátového enginu na účely monitorovania výkonu a riešenia problémov.
S architektúrou Extended Events (XEvents) môžu používatelia používať toľko alebo len málo dát, koľko potrebujú, na monitorovanie, identifikáciu alebo riešenie problémov s výkonom SQL Server, Azure SQL Database a Azure SQL Managed Instance. Rozšírené udalosti sú veľmi konfigurovateľné, ľahké a dobre škálovateľné.
Referencia:
Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.
Príčiny patových situácií
Patové situácie sú spôsobené konkurenčnými súbežnými zámkami v databáze, zvyčajne pri viacstupňových transakciách. Každá používateľská relácia môže mať jednu alebo viac úloh bežiacich v jej mene, pričom každá úloha môže načítať alebo čakať na získanie rôznych zdrojov. Nasledujúce typy zdrojov môžu spôsobiť blokovanie a nakoniec spôsobiť patovú situáciu.
- Zámky: Zámky čakajúce na načítanie zdrojov ako objekty, stránky, riadky, metadáta a aplikácie môžu spôsobiť zablokovanie. Napríklad transakcia T1 má zdieľaný zámok (S zámok) na riadku r1 a čaká na exkluzívny zámok (X zámok) pre riadok r2. Transakcia T2 má zdieľaný zámok (S zámok) na riadku r2 a čaká na získanie exkluzívneho zámku (X zámok) pre riadok r1. To vedie k uzamknutej slučke, kde T1 a T2 čakajú, kým druhý uvoľní uzamknutý zdroj.
- Pracovné vlákna: Úlohy v rade na dostupné pracovné vlákna môžu spôsobiť zablokovanie. Ak má frontová úloha zdroj, ktorý blokuje všetky pracovné vlákna, vznikne patová situácia. Napríklad po tom, čo session S1 spustí transakciu a získa zdieľaný zámok (S-lock) pre riadok r1, prejde do spánku. Aktívna relácia bežiaca na všetkých dostupných pracovných vláknach sa snaží získať exkluzívny zámok (X-lock) pre riadok r1. Keďže session S1 nemôže získať work-thread, nemôže transakciu potvrdiť a uvoľniť zámok na linke r1. To povedie k patovej situácii.
- Pamäť: Patová situácia môže nastať, keď súbežná požiadavka čaká na získanie pamäte a aktuálne dostupná pamäť nestačí na jeho potreby. Napríklad dva súbežné dotazy (Q1 a Q2) sa vykonávajú ako používateľom definované funkcie, pričom získajú 10 MB a 20 MB pamäte. Ak každý dotaz vyžaduje 30 MB a celková dostupná pamäť je 20 MB, Q1 a Q2 musia čakať, kým sa uvoľní pamäť, čo spôsobí patovú situáciu.
- Paralelné dotazovanie a zdroje súvisiace s vykonávaním: Koordinátory spracovania, generátory alebo spotrebiteľské vlákna typicky spojené s prepínanými portmi sa môžu navzájom blokovať, ak obsahujú aspoň jeden proces, ktorý nie je súčasťou paralelného dotazu, čo vedie k zablokovaniu. Okrem toho, keď sa spustí paralelný dotaz, SQL Server určí stupeň paralelizmu alebo počet pracovných vlákien na základe aktuálnej záťaže. Patová situácia môže nastať, ak dôjde k neočakávanej zmene v systémovej záťaži, napríklad keď sa na serveri spustí nový dotaz alebo keď systému dôjdu pracovné vlákna.
- Zdroje Multiple Activity Outcome Set (MARS): Tieto zdroje sa používajú na riadenie krížového vykonávania viacerých požiadaviek na aktivity v rámci MARS.
Referencia:
Prihlásenie na hypertextový odkaz je viditeľné.
Zamrznutie rozšíreného logovania udalostí
Vytvorte udalosť rozšírenia na zaznamenanie informácií o zablokovaní pomocou nasledujúceho príkazu:
Spustiť reláciu s udalosťou patového bodu
Zastavte sedenie podujatia
Vymazať reláciu udalosti
Dotaz na dáta relácie udalostí
Testovacie patové situácie
Vytvorte novú tabuľku Tab1 na testovanie, vytvorte dve nové okná na vykonávanie a vykonajte nasledujúce príkazy:
Patová situácia nastáva nasledovne:
Transakcia (ID procesu 68) s iným procesom je zablokovaná na uzamknutom zdroji a bola vybraná ako obeť zablokovania. Prosím, spustite transakciu znova. Transakcia (ID procesu 68) bola zablokovaná na zámkových zdrojoch s iným procesom a bola vybraná ako obeť zablokovania. Zopakuj transakciu.
Pozrite si údaje o relácii udalostí, ako je znázornené na nasledujúcom obrázku:
Podrobné XML údaje sú nasledovné:
(Koniec)
|