sql >> Databáze >  >> RDS >> Database

Počkejte na statistiky a úložiště dotazů

Na tomto webu je mnoho blogových příspěvků souvisejících se statistikami čekání; jsou jednou z nejdůležitějších metrik, které můžete použít při řešení problémů s výkonem na serveru SQL Server. Statistiky čekání byly zpřístupněny v SQL Server 2005 a tradičně představovaly čekání na úrovni instance prostřednictvím sys.dm_os_wait_statistics. Tyto informace jsou skvělé při řešení problémů s výkonem systému obecně, ale při pohledu na výkon dotazu bylo možné informace o čekání vidět pouze při provádění dotazu a pokud čekal na zdroj prostřednictvím sys.dm_os_waiting_tasks. Data v sys.dm_os_waiting_tasks jsou přechodná (to je to, co právě čeká) a není snadné je zachytit a uchovat po dobu životnosti dotazu pro pozdější ladění výkonu.

V SQL Server 2016 je vystaven nový DMV, sys.dm_exec_session_wait_stats, který poskytuje informace o čekání na existující aktivní relaci. Pokud znáte session_id, můžete sledovat čekání na dotaz, kdy se spustí a kdy se dokončí (snímek informace na začátku a na konci dotazu a poté informace porovnejte). Problém je v tom, že musíte znát session_id pro dotaz a musíte předem nastavit sběr dat – což není triviální, když se nacházíte uprostřed problému s vysokou prioritou.

Informace o statistikách čekání existují ve skutečném plánu provádění počínaje SQL Server 2016 SP1. Zaznamenává se pouze prvních 10 čekání a existují omezení, pokud jde o to, co tato data představují. Například CXPACKET je ignorován a není zahrnut ve výstupu, ale bude zahrnut v 2016 SP2 a 2017 CU3 a novějších – kde místo toho CXCONSUMER zachytí irelevantní čekání na paralelismus (které nebude zahrnuto do skutečných čekání plánu).

Jak tedy můžeme vidět, na co konkrétní dotaz skutečně čeká? Můžeme použít Query Store! SQL Server 2017 zahrnuje zachycování informací o statistikách čekání v Query Store a tato funkce je k dispozici také v Azure SQL Database. Statistiky čekání jsou svázány s plánem dotazů a jsou zachycovány v průběhu času, stejně jako statistiky za běhu. Přidání informací o statistikách čekání v Query Store bylo po prvním vydání požadavkem číslo jedna na funkci a všechny tyto informace dohromady vytvářejí výkonné možnosti řešení problémů.

Začínáme

Zachycování statistik čekání v Query Store je ve výchozím nastavení pro Azure SQL Database povoleno. Když je vytvořena nová databáze v SQL Server 2017 nebo je databáze upgradována z SQL Server 2014 nebo starší, Query Store je ve výchozím nastavení zakázán… a proto je zakázáno zachycování statistik čekání. Když je databáze upgradována ze serveru SQL Server 2016 a má povoleno úložiště dotazů, po upgradu bude povoleno shromažďování statistik čekání pro úložiště dotazů.

Pro demonstrační účely jsem obnovil databázi WideWorldImporters, poté jsem provedl níže uvedené dotazy, abych povolil úložiště dotazů a vymazal veškerá data, která mohla dříve existovat (je to nutné pouze proto, že se jedná o ukázkovou databázi):

ALTER DATABASE [WideWorldImporters] SET QUERY_STORE =ON;GO ALTER DATABASE [WideWorldImporters] SET QUERY_STORE ( OPERATION_MODE =READ_WRITE);GO ALTER DATABASE [WideWorldImporters] SET QUERY>
 Výchozí nastavení se používají s výše uvedenými příkazy, a pokud chcete změnit některou z možností, můžete tak učinit prostřednictvím uživatelského rozhraní nebo příkazu ALTER DATABASE. Nyní, když je úložiště dotazů povoleno, začne zachycovat data dotazu včetně textu dotazu, plánů, statistik za běhu a statistik čekání. 

Prohlížení statistiky čekání

Abychom vygenerovali nějaká data, vytvoříme uloženou proceduru, která opakovaně spouští paralelní dotaz.

ODPADNUTÍ POSTUPU, POKUD EXISTUJE [Prodej].[OrderInfo];PŘEJÍT VYTVOŘIT POSTUP [Prodej].[OrderInfo]ASBEGIN WHILE 1=1 ZAČNĚTE VYBRAT * Z Sales.OrderLines ol VNITŘNÍ PŘIPOJENÍ Warehouse.StockItems s ON ol.StockItemID .StockItemID OPTION (QUERYTRACEON 8649); ENDEND

Potom vytvořte soubor .cmd s následujícím kódem:

start sqlcmd -S WIN2016\SQL2017 -d WideWorldImporters -q"EXECUTE [Sales].[OrderInfo];"
exit

To nám umožňuje ne spusťte SP v Management Studio, což vytváří významné čekání ASYNC_NETWORK_IO; chceme vidět čekání související s paralelismem. Uložte soubor .cmd a spusťte jej dvojitým kliknutím. Spuštěním více souborů můžete vygenerovat další zatížení. V tomto scénáři uvidíme především čekání související s tímto dotazem, protože nemáme žádné další pracovní zatížení. Pokud chcete generovat ještě více čekacích dat, můžete spouštět další dotazy na databázi WideWorldImporters souběžně.

Po několika minutách zastavte soubory příkazů a rozbalte databázi WideWorldImporters v Management Studio, abyste viděli složku Query Store a sestavy pod ní. Pokud otevřete sestavu Top Resource Consuming Queries, měli byste vidět dotaz uložené procedury jako hlavní dotaz.

Výchozí zobrazení tohoto přehledu zobrazuje dotazy s nejvyšší celkovou dobou trvání. Chcete-li zobrazit dotazy založené na statistikách čekání, můžeme vybrat tlačítko Konfigurovat a změnit jej na Doba čekání (ms).

Tlačítko Konfigurovat v zobrazení přehledu (vpravo nahoře) Změna zdroje pro přehled Všimněte si, že můžete také nakonfigurovat časový interval a počet vrácených dotazů. Pro tento příklad je přijatelná poslední hodina.

Pokud najedete myší na lištu pro první dotaz, uvidíte doby čekání na dotaz. Toto zobrazení je v současnosti jediným způsobem, jak zobrazit informace o čekání v uživatelském rozhraní, ale další zprávy specifické pro statistiky čekání snad přijdou v budoucí verzi Management Studio.

Počkejte na informace v uživatelském rozhraní

Ti z vás, kteří nějakou dobu pracovali se statistikami čekání, si všimnou, že popisy typů čekání se liší. To znamená, že místo typu čekání CXPACKET k označení paralelismu jednoduše uvidíte „Typ čekání paralelismu“. Toto je zásadní rozdíl v Query Store:Typy čekání jsou seskupeny do kategorií. V SQL Server je v tuto chvíli více než 900 různých typů čekání a pokusit se sledovat každý z nich samostatně je extrémně nákladné. Kromě toho byl Query Store navržen s ohledem na všechny datové profesionály – ať už jste expert na ladění výkonu nebo teprve začínáte s pochopením toho, jak SQL Server funguje, měli byste být schopni používat Query Store ke snadnému vyhledání dotazů se špatným výkonem. To také znamená, že informace o čekání budou srozumitelnější. Úplný seznam kategorií čekání a typů čekání v nich naleznete v dokumentaci k sys.query_store_wait_stats.

Informace o čekání můžete také zobrazit pomocí T-SQL. Příklad dotazu je ten níže, který obsahuje dotaz, plan_id(a) pro tento dotaz a statistiky čekání pro daný časový interval:

SELECT TOP (10) [ws].[wait_category_desc], [ws].[avg_query_wait_time_ms], [ws].[total_query_wait_time_ms], [ws].[id_plánu], [qt].[query_sql_text], [rsi ].[start_time], [rsi].[end_time]OD [sys].[query_store_query_text] [qt]PŘIPOJTE SE [sys].[query_store_query] [q] ON [qt].[query_text_id] =[q].[query_text_id ]PŘIPOJTE SE [sys].[query_store_plan] [qp] ON [q].[query_id] =[qp].[query_id]PŘIPOJTE SE [sys].[query_store_runtime_stats] [rs] ON [qp].[plan_id] =[rs ].[plan_id] PŘIPOJTE SE [sys].[query_store_runtime_stats_interval] [rsi] ON [rs].[runtime_stats_interval_id] =[rsi].[runtime_stats_interval_id]PŘIPOJTE SE [sys].[query_store_wait_stats] [ws] ON [ws].[interval_id_stat] ] =[rs].[runtime_stats_interval_id] AND [ws].[plan_id] =[qp].[plan_id]WHERE [rsi].[end_time]> DATEADD(MINUTE, -5, GETUTCDATE()) AND [ws]. [execution_type] =0ORDER BY [ws].[avg_query_wait_time_ms] DESC;

Výstup dotazu

I když nyní vidíte všechna čekání na daný dotaz a jeho plán, stále se budete muset ponořit dále do výkonu, abyste například pochopili, proč dotaz běží paralelně (když možná nechcete) nebo co může blokovat dotaz. Všimněte si, že statistiky čekání, stejně jako statistiky za běhu, jsou v průběhu času svázány s plánem dotazů. V tomto výstupu je délka intervalu pro Query Store nastavena na 10 minut, takže statistiky čekání jsou pro každý plán pro tento 10minutový interval (21:50 21. listopadu 2017 do půlnoci 22. listopadu 2017). Ve výchozím nastavení je délka intervalu, když povolíte úložiště dotazů, 60 minut.

Shrnutí

Statistiky čekání v kombinaci s individuálními plány dotazů dělají z Query Store ještě působivější nástroj při řešení problémů s výkonem systému a dotazů. Query Store je jediná funkce, která vám umožňuje nativně zaznamenávat dotazy, plán, metriky výkonu a statistiky čekání na jednom místě. Pro ty z vás, kteří jsou zvyklí na nespočet typů čekání, by mělo být přizpůsobení kategoriím používaným v Query Store bezproblémové. Pro každého, kdo statistiky čekání začíná, jsou kategorie skvělým místem, kde začít porozumět zdroji, na který dotaz čeká.


  1. BIN() – Získá binární hodnotu čísla v MySQL

  2. Změna existujícího sloupce na vypočítaný sloupec na serveru SQL (příklad T-SQL)

  3. Jak vypnu vypršení platnosti hesla Oracle?

  4. Reverzní řetězec slovo po slovu pomocí SQL