Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 2617|Odpoveď: 2

[Tipy] SQL Server používa rozšírené udalosti na sledovanie problémov so zablokovaním

[Kopírovať odkaz]
Zverejnené 2. 3. 2024 19:13:04 | | | |
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)





Predchádzajúci:Optimalizácia výkonu .NET/C# pomocou paralelného dotazovania PLINQ
Budúci:Vykonávanie kódu vo Visual Studio pomocou interaktívneho okna C#
 Prenajímateľ| Zverejnené 2. 3. 2024 19:14:35 |
Rozšírte predvolenú cestu súboru udalostí:

C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log\deadlock_monitor_0_133538477770860000.xel
 Prenajímateľ| Zverejnené 2. 3. 2024 19:16:54 |
Vytvor novú tabuľku tab1 na testovanie SQL skriptu

Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com