sql >> Databáze >  >> RDS >> Sqlserver

Jak číst a analyzovat plány provádění SQL Serveru

Plány provádění SQL Server jsou bránou pro optimalizaci dotazů a spouštění dotazů pro databázové profesionály. Odhalují zpracování dotazů a související fáze, jako jsou ovlivněné tabulky, indexy, statistiky, typy spojení, počet ovlivněných řádků, zpracování dotazů, řazení dat a načítání dat.

V minulém článku Plán spuštění serveru SQL – co to je a jak pomáhá při problémech s výkonem? prozkoumali jsme pracovní postup provádění dotazů na vysoké úrovni, různé typy plánů provádění (grafické, XML a textové) spolu se skutečnými a odhadovanými plány provádění.

Nyní prozkoumáme věci, které potřebujete vědět při vyhodnocování plánů provádění SQL Serveru a jak nejlépe interpretovat informace.

Čtení grafického plánu provádění SQL Server

Obecně čteme prováděcí plány zprava doleva. Začnete operátorem prováděcího plánu vpravo nahoře a přesunete se doleva. Pomáhá vám sledovat logický tok dat v dotazu.

Předpokládejme, že provedete následující dotaz ve vzorové databázi [AdventureWorks2019] a zobrazíte skutečný plán provádění.

SELECT TOP (10) [SalesOrderID] [SalesOrderDetailID] [CarrierTrackingNumber] [OrderQty] [ProductID] [SpecialOfferID] [ModifiedDate] FROM [AdventureWorks2019].[Sales].[SalesOrderDetail] where [UnitPrice]>1000

Dotaz načte data z tabulky [Sales].[SalesOrderDetail] pro objednávky s jednotkovou cenou vyšší než 1 000.

Pokud čteme plán provádění zprava doleva, všimneme si následujícího:

  • Prvním operátorem je Clustered Index Scan, který čte data z tabulky [Sales].[SalesOrderDetail]. Když umístíte ukazatel myši na šipku spojující operátor Clustered Index Scan a Top , vrátí odhadovaný a skutečný počet řádků a odhadovanou velikost dat.

  • Předává data z operátoru Clustered Index Scan operátoru Top předá 10 řádků operátoru SELECT.

Interně SQL Server provádí plán zleva doprava. Pokud vás zajímají fyzické příkazy operátora, měli byste si přečíst plán provádění zleva doprava. Každý operátor požaduje data od dalšího operátora. Například ve výše uvedeném scénáři operátor Top požaduje data z Clustered Index Scan. Clustered Index Scan vrací řádky z tabulky [Sales].[SalesOrderDetail], které splňují kritéria Kde podmínka klauzule.

V případě, že se v prováděcím plánu sloučí více větví, měli byste postupovat zprava doleva a shora dolů.

Náklady na operátora

Každý operátor v plánu provádění SQL Server je spojen s cenou. Náklady na operátora jsou relativní k ostatním nákladům v prováděcím plánu. Obvykle se musíme soustředit na drahého operátora a vyladit dotaz kolem něj.

V případě komplikovaného prováděcího plánu může být obtížné identifikovat nákladného operátora. V tomto případě můžete použít NASTAVIT SHOWPLAN_ALL ON, a poskytne informace v tabulkovém formátu.

Můžete také použít [Stmt text] k rozdělení plánu provádění na úrovni jednotlivých operátorů a příkazů.

SQL Server Management Studio (SSMS) také poskytuje flexibilitu při hledání operátora na základě vyhledávacích kritérií. Chcete-li to provést, klikněte pravým tlačítkem na plán provádění a vyberte možnost Najít uzel. Otevře se okno s různými podmínkami vyhledávání. Zadejte svůj požadavek a ten bude ukazovat na konkrétní uzel, jak je znázorněno níže.

Případně můžete použít Azure Data Studio a přejít na Spustit aktuální dotaz se skutečným plánem  pod paletou příkazů. To poskytuje skutečný prováděcí plán v kompaktní podobě spolu s hlavními operacemi pro rychlou identifikaci nákladných operátorů.

Analýza plánu show

Můžete identifikovat nepřesný odhad mohutnosti a prozkoumat problematické plány provádění. To vám poskytne stručné informace o nalezení konkrétního operátora a doporučení na kartě ShowPlan Analysis. Výsledek můžete seřadit ve sloupcích rozdílu, skutečných a odhadovaných sloupců, abyste našli problém a doporučení pro konkrétního operátora v prováděcím plánu. To je k dispozici od SSMS 17.4.

Chcete-li to provést, klikněte pravým tlačítkem na plán provádění a poté klikněte na Analyzovat skutečný plán provádění.

Poté klikněte na hypertextový odkaz v části Vyhledání podrobností . To vysvětlí možné scénáře nepřesnosti odhadů a řešení, jak tyto odhady zlepšit. Je to dobrý výchozí bod pro problémy s odhadem mohutnosti.

Porovnat plán zobrazení

Předpokládejme, že jste identifikovali problém v prováděcím plánu a implementovali řešení k jeho nápravě. Jak ale porovnáte předchozí plán realizace (jak to bylo před implementací řešení) a současný plán realizace? Program SSMS Compare Showplan Tato funkce vám dává flexibilitu při porovnání dvou realizačních plánů. Zdůrazňuje podobnosti a rozdíly mezi těmito plány.

DBA obvykle obdrží volání od vývojářů, že konkrétní dotaz funguje dobře v produkci, ale trvá dlouho v prostředí QA se stejnými parametry. Dalším případem použití je migrace na novější verzi SQL Server. Předpokládejme, že po migraci narazíte na problémy s dotazem, který funguje dobře v nižší verzi SQL. Tento nástroj můžete použít také k porovnání plánů provádění různých verzí SQL a úrovní oprav.

Uložte plán provádění v plánu SQLPlan rozšíření. Poté můžete kliknout pravým tlačítkem na jiný plán realizace a vybrat Porovnat plán představení .

Plány reálného provádění v SSMS

Můžete povolit plán živého provádění aktivního dotazu. To vám poskytne statistiky v reálném čase o toku dat k různým operátorům. Ve statistikách provádění doby běhu můžete sledovat uplynulý čas a počet řádků. Je to vynikající funkce pro odstraňování problémů a ladění problémů s výkonem. Můžete použít živé statistiky dotazů ze serveru SQL Server 2016 a vyšší.

Poznámka:Měli byste použít nejnovější verzi SSMS. Nejnovější verzi SSMS si můžete stáhnout v dokumentech Microsoft.

  • Aktuální nejnovější verze:SSMS 18.7.1

Chcete-li získat živé statistiky dotazů, zapněte Zahrnout živé statistiky dotazů pomocí panelu nástrojů SSMS.

Plán provádění v reálném čase můžete zobrazit také v Monitoru aktivity . V Monitoru aktivity vyberte požadovaný proces, kliknutím na něj pravým tlačítkem zobrazte nabídku a vyberte možnost Zobrazit plán spuštění v reálném čase.

Získáte tak živé odhady dotazů spolu s datovým tokem a procenty dokončení jednotlivých operátorů. Obvykle čekáme na dokončení provádění dotazu a zobrazíme skutečný plán provádění. Předpokládejme však, že výsledek vašeho dotazu bude trvat déle než 30 minut. V tomto případě můžete pomocí živé statistiky dotazů sledovat jednotlivé operátory, datový tok a poukázat na to, kterému operátorovi trvá dokončení dotazu. Například, jak je znázorněno níže, dotaz běží 12 minut 48 sekund a odhaduje se, že dotaz je dokončen na 20 %. Na úrovni operátora je skenování indexu a zařazování počtu řádků dokončeno ze 41 %. Tečkované čáry ukazují pohyb dat.

Kontrola využití plánu provádění SQL Server

Plány provádění SQL Serveru jsou neuvěřitelně užitečné při odstraňování problémů a optimalizaci pomalých dotazů. Každý databázový profesionál musí vědět, jak analyzovat a porozumět informacím, jakmile bude k dispozici plán provádění. Jak již bylo zmíněno dříve, v SSMS a Azure Data Studio jsou různé nástroje, které vám pomohou zkontrolovat a vyřešit problémy s výkonem – zvláště funkce Porovnat plán je ta, kterou můžete využít, když začnete provádět změny a vyhodnocovat výkon.


  1. Nelze najít vstupní bod s názvem „InterlockedIncrement“ v knihovně DLL „kernel32.dll“ – [chráněno e-mailem] 64 bit

  2. Spustit dotaz mySQL jako úlohu cron?

  3. jak převést řetězec data do formátu data v oracle10g

  4. 13 blogových článků o doporučených postupech a tipech pro návrh databáze