Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 2617|Odpověď: 2

[Tipy] SQL Server používá rozšířené události ke sledování problémů se zablokováním

[Kopírovat odkaz]
Zveřejněno 02.03.2024 19:13:04 | | | |
Požadavky: Existuje mnoho důvodů, proč databáze SQL Server způsobuje zablokování, v produkci se může každý setkat s problémy s zablokováním a konkrétní příčina nemusí být určena pouze na základě abnormálních informací o zablokování aplikací, proto je nutné používat události rozšíření v SQL Serveru ke sledování problémů s zablokováním a zaznamenávání konkrétních detailů, kdy k zablokování dojde.

Rozšířený přehled akce

Extended Events je lehká funkce monitorování výkonu, která uživatelům umožňuje shromažďovat data potřebná k monitorování a řešení problémů. Tato funkce vám umožňuje zobrazit podrobnosti o interním provozu datového enginu pro účely monitorování výkonu a řešení problémů.

S architekturou Extended Events (XEvents) mohou uživatelé používat tolik nebo tak málo dat, kolik potřebují, ke sledování, identifikaci nebo řešení problémů s výkonem SQL Serveru, Azure SQL Database a Azure SQL Managed Instance. Rozšířené události jsou vysoce konfigurovatelné, lehké a dobře škálovatelné.

Odkaz:
Přihlášení k hypertextovému odkazu je viditelné.
Přihlášení k hypertextovému odkazu je viditelné.


Příčiny patových situací

Patové situace jsou způsobeny konkurenčními souběžnými zámky v databázi, obvykle při vícestupňových transakcích. Každá uživatelská relace může mít jeden nebo více úkolů běžících za sebe, přičemž každá úloha může načítat nebo čekat na načtení různých zdrojů. Následující typy zdrojů mohou způsobit blokování a nakonec způsobit patovou situaci.

  • Zámky: Zámky čekající na načtení zdrojů jako objekty, stránky, řádky, metadata a aplikace mohou způsobit zablokování. Například transakce T1 má sdílený zámek (S zámek) na řádku r1 a čeká na získání exkluzivního zámku (X zámku) pro řádek r2. Transakce T2 má sdílený zámek (S zámek) na řádku r2 a čeká na získání exkluzivního zámku (X zámku) pro řádek r1. To vede k uzamčené smyčce, kdy T1 i T2 čekají, až se uzamčený zdroj uvolní navzájem.
  • Pracovní vlákna: Fronta úloh pro dostupná pracovní vlákna může způsobit zablokování. Pokud má frontovaný úkol zdroj, který blokuje všechna pracovní vlákna, dojde k zablokování. Například po zahájení transakce v rámci relace S1 a získání sdíleného zámku (S-lock) pro řádek r1 přejde do spánku. Aktivní relace běžící na všech dostupných pracovních vláknech se snaží získat exkluzivní zámek (X-lock) pro řádek r1. Protože session S1 nemůže získat pracovní vlákno, nemůže transakci potvrdit a uvolnit zámek na řádku r1. To povede k patové situaci.
  • Paměť: Patová situace může nastat, když současný požadavek čeká na získání paměti a aktuálně dostupná paměť mu nestačí. Například dva souběžné dotazy (Q1 a Q2) jsou vykonávány jako uživatelem definované funkce, čímž získávají 10 MB a 20 MB paměti. Pokud každý dotaz vyžaduje 30 MB a celková dostupná paměť je 20 MB, Q1 a Q2 musí počkat, až se uvolní paměť, což povede k zablokování.
  • Paralelní dotazování a zdroje související s vykonáním: Koordinátory zpracování, generátory nebo spotřebitelská vlákna obvykle spojená s přepnutými porty se mohou navzájem blokovat, pokud obsahují alespoň jeden proces, který není součástí paralelního dotazu, což vede k patovým situacím. Navíc, když paralelní dotaz zahájí vykonávání dotazu, SQL Server určí míru paralelismu nebo počet pracovních vláken na základě aktuální pracovní zátěže. K zablokování může dojít v případě neočekávané změny v zátěži systému, například když na serveru začne běžet nový dotaz nebo když systému dojdou pracovní vlákna.
  • Zdroje Multiple Activity Outcome Set (MARS): Tyto zdroje se používají ke kontrole křížového provádění více požadavků na aktivity v rámci MARS.


Odkaz:
Přihlášení k hypertextovému odkazu je viditelné.

Slepá situace při rozšířeném zablokování událostí

Vytvořte událost rozšíření pro zaznamenání informací o mrtvém zablokování pomocí následujícího příkazu:


Spusťte seanci s mrtvým zablokováním

Zastavte sezení události

Smazat relaci události

Dotaz na data relace událostí


Testovací patové situace

Vytvořte novou tabulku Tab1 pro testování a vytvořte dvě nová okna pro vykonání a provedete následující příkazy:

Patová situace nastává následovně:

Transakce (ID procesu 68) s jiným procesem je zablokována na uzamknutý zdroj a byla vybrána jako oběť zablokování. Prosím, spusť transakci znovu.
Transakce (ID procesu 68) byla zablokována na zámkových zdrojích s jiným procesem a byla vybrána jako oběť zablokování. Znovu spusť transakci.


Zobrazit data z eventových relací, jak je znázorněno na následujícím obrázku:



Podrobná XML data jsou následující:


(Konec)





Předchozí:Optimalizace výkonu .NET/C# pomocí paralelního dotazu PLINQ
Další:Provádění kódu ve Visual Studiu pomocí interaktivního okna C#
 Pronajímatel| Zveřejněno 02.03.2024 19:14:35 |
Rozšiřte výchozí cestu souboru události:

C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log\deadlock_monitor_0_133538477770860000.xel
 Pronajímatel| Zveřejněno 02.03.2024 19:16:54 |
Vytvořte novou tabulku tab1 pro testování SQL skriptu

Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com