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

Plán provádění SQL Server – co to je a jak pomáhá při problémech s výkonem?

Plán provádění SQL Server je užitečný pro vyšetřování problémů s výkonem vašich dotazů. Databázoví odborníci často dostávají lístky na problémy nebo stížnosti uživatelů, že dotazy běží pomalu. Výsledky dotazů, které dříve trvaly dvě nebo tři minuty, najednou vyžadují více než 30 minut. Odstraňování problémů může vyžadovat prozkoumání oblastí, jako jsou zdroje serveru (CPU, paměť), statistiky, výkon disku, blokování, uváznutí a indexy. V tomto článku se zaměříme na roli spouštěcího plánu SQL Serveru při řešení problémů s výkonem.

Co se stane, když odešlete T-SQL na SQL Server?

Podívejme se, co se stane, když odešlete dotaz pomocí Transact-SQL nebo T-SQL na SQL Server. Pro uživatele na tom samozřejmě nezáleží. Uživatelé očekávají, že rychle získají přesné výsledky, ať už se dotazují na databázi nebo prohledávají web.

Pracovní postup dotazu SQL na vysoké úrovni

  1. Uživatel se ověří na serveru SQL Server v klientské aplikaci a odešle dotaz.
  2. SQL Server analyzuje dotaz a zkontroluje případné syntaktické chyby.
  3. Strom analýzy je dále zpracováván v Algebrizer, který řeší všechny objekty, tabulky a sloupce v dotazu. Provádí také kontrolu datových typů sloupců. V případě jakýchkoli problémů vrátí chybu. Algebrizer generuje strom procesu dotazu a hash dotazu. Pokud plán provádění již existuje, SQL Server použije tento plán uložený v mezipaměti a provede dotaz.
  4. Pokud žádný plán neexistuje nebo je zastaralý, optimalizátor dotazů provede úplnou optimalizaci založenou na nákladech s pomocí statistik, stromu procesu dotazů a omezení. Na základě těchto vstupů připraví nákladově optimalizovaný plán provádění SQL Server.
  5. Nakonec dotazovací stroj SQL Server provede dotaz podle plánu provádění a vrátí výsledky.

Přehled plánu provádění SQL Server

Plán provádění SQL Serveru pomáhá databázovým profesionálům řešit problémy s výkonem dotazů a psát efektivní dotazy. Když spuštění dotazu trvá dlouho, plán provádění SQL Serveru vám může pomoci určit bod, kdy dotaz zabírá nejvíce prostředků a času.

Ke generování plánu provádění můžete použít kteroukoli z následujících možností:

  1. SQL Server Management Studio
  2. Azure Data Studio
  3. Profiler serveru SQL
  4. Rozšířené události
  5. Zobrazení dynamické správy
  6. Software pro monitorování databází třetí strany

Prováděcí plány generované #1 až #5 jsou podobné. Software třetí strany pro monitorování databází (#6) poskytuje další funkce, které používají barevné kódování k identifikaci nákladných operátorů.

SQL Server poskytuje odhadované a skutečné plány provádění, podobné těm, které zažíváte, když potřebujete opravit své auto. Mechanik prohlédne vaše vozidlo, poté obdržíte odhad práce na základě vašich požadavků, stavu vozidla a přibližného času a materiálů, které si mechanik myslí, že oprava zabere. Skutečné náklady a čas se samozřejmě mohou lišit, stejně jako tomu je u odhadovaných a skutečných plánů provádění SQL Server.

Odhadované plány provádění

Bez provedení dotazu můžete získat odhadovaný (logický) plán spuštění serveru SQL Server založený na statistikách serveru SQL Server. V SQL Server Management Studio (SSMS) postupujte takto:

  1. Zvýrazněte dotaz (v případě, že chcete plán provádění pro konkrétní dotaz).
  2. Klikněte na tlačítko Zobrazit odhadovaný plán provedení (klávesová zkratka Ctrl + L), jak je znázorněno níže.

Někdy SQL Server není schopen vytvořit odhadovaný plán; například pokud je parametr použit bez uvedení jeho hodnoty v dotazu nebo pokud není deklarována dočasná tabulka.

Plán skutečného provedení

Jakmile odešlete dotaz na SQL Server, můžete získat skutečný plán provádění představující kroky, které SQL Server provedl k provedení dotazu. Stejně jako ve scénáři opravy vozidla je to jako skutečný účet, který obdržíte.

Chcete-li získat skutečný plán provádění, před spuštěním dotazu postupujte podle kroků níže v SSMS.

  1. Zvýrazněte dotaz.
  2. Klikněte na Zobrazit plán skutečného provedení tlačítko (klávesová zkratka Ctrl + M ), jak je uvedeno výše.

Formáty plánu provádění SQL Server

Ve výchozím nastavení generují výše popsané procedury SSMS plán provádění SQL Serveru v grafickém formátu. Máte však možnost prohlížet si prováděcí plány ve třech různých formátech:

  1. Grafické
  2. XML
  3. Text

Podívejme se na každý z těchto formátů.

1. Grafický prováděcí plán

Grafický plán znázorňuje všechny komponenty, včetně toku dat, jak je znázorněno níže.

Operátoři

Operátoři jsou zobrazeni jako ikony. Každý operátor je určen k provádění konkrétního úkolu. Optimalizátor dotazů na serveru SQL Server může například provádět prohledávání tabulek, prohledávání indexů a vyhledávání. Takto vypadá operátor hledání seskupeného indexu, když získává data z indexu v tabulce [AdventureWorks2019].[HumanResources]:

Procentuální náklady

Grafický plán také ukazuje procentní náklady – zde 99 % pro hledání seskupeného indexu – spojené s operátorem. Tyto náklady jsou relativní k ostatním operátorům použitým při provádění dotazu.

Šipky toku dat

Šipky spojují operátory a jejich šířka odráží počet řádků dat, které se pohybují od jednoho operátoru k druhému.

Předpokládejme například, že váš dotaz generuje pouze jeden řádek výstupu, ale jeho dokončení trvá dlouho. Když najedete myší na šipku datového toku v prováděcím plánu, zjistíte, že počet přečtených řádků je v milionech. To představuje obrovskou nerovnováhu ve využití zdrojů a odhaluje oblast, která potřebuje optimalizaci.

Popisky

Jak je znázorněno níže, když najedete myší na operátora, zobrazí se popisky s dalšími statistikami o toku dat.

Okno vlastností

Okno Vlastnosti zobrazuje podrobné informace o operátorech a jejich komponentách. Toto je nadmnožina popisků.

2. Plán provádění SQL Serveru ve formátu XML

Plán provádění XML je ve specifickém, strukturovaném formátu. Ačkoli je formát XML méně vizuálně intuitivní, obsahuje všechny podrobnosti v XML a nevyžaduje další kroky k zobrazení vlastností a popisků. Formát XML můžete snadno převést na grafický formát a naopak.

Chcete-li převést grafický plán provádění do formátu XML, klikněte na něj pravým tlačítkem a vyberte možnost Zobrazit plán provádění XML , jak je uvedeno níže.

Výsledkem je následující strukturovaný plán provádění ve formátu XML.

Následující příkazy také generují plán provádění ve formátu XML:

  • Pro odhadovaný plán:ZAPNĚTE SHOWPLAN_XML
  • Skutečný plán: NASTAVTE STATISTICS_XML ZAPNUTO

3. Textově formátovaný plán provádění SQL Server

Prováděcí plán můžete vygenerovat několika způsoby:

  • ZAPNOUT SHOWPLAN_TEXT

Tento příkaz vygeneruje odhad plán provádění bez podrobné informace o provádění dotazu. Je určen pro aplikace, jako je nástroj sqlcmd.

  • NASTAVTE SHOWPLAN_ALL ZAPNUTO

Tento příkaz vygeneruje odhad prováděcí plán, s podrobné informace o všech operátorech a operacích v tabulkovém formátu.

  • NASTAVIT STATISTICKÝ PROFIL

Tento příkaz generuje skutečný plán provádění po provedení dotazu v tabulkovém formátu.

Proč se odhadované a skutečné plány provádění SQL Server liší?

Odhadované a skutečné plány provádění jsou obecně podobné, i když některé okolnosti mohou způsobit, že se budou lišit.

Zastaralé statistiky

Hlavním důvodem rozdílů mezi odhadovanými a skutečnými plány provádění jsou zastaralé statistiky.

Optimalizátor dotazů používá statistiky k vytvoření nákladově efektivního a optimalizovaného plánu provádění dotazů. Pokud vaše statistiky nejsou aktualizovány nebo pokud vaše vzorkování dat není vhodné, optimalizátor dotazů provede úplnou optimalizaci a sestaví plán provádění na základě starých informací. Můžete také získat neefektivní plán provádění, který může vést k problémům s výkonem dotazů.

Zastaralé statistiky někdy nastanou, když se data často mění a statistiky se neaktualizují podle údržby indexu.

Plán provádění sériového nebo paralelního serveru SQL Server

Při kompilaci optimalizátor dotazů sestaví plán provádění a vytvoří sériový nebo paralelní plán v závislosti na ceně dotazu a prahové hodnotě paralelismu. Zatímco plán provádění může být stejný pro sériový i paralelní režim, SQL Server se mezi nimi rozhoduje na základě prostředků a aktivity serveru.

Neplatné odhady

Jak již bylo zmíněno dříve, Algebrizer sváže názvy objektů před provedením SQL dotazu. Předpokládejme, že určíte, že tabulka s názvem test bude vytvořena za běhu, a poté se pokusíte vygenerovat odhadovaný plán provádění. Protože tato tabulka neexistuje, obdržíte chybovou zprávu, jak je uvedeno níže.

Použití prováděcího plánu

Stručně řečeno, můžete vygenerovat plán provádění SQL Serveru v grafickém, XML a textovém formátu a použít jej k řešení problémů s výkonem databáze.

Plány provádění dotazů jsou primárními kroky při identifikaci pracovního postupu dotazů, operátorů a komponent, takže můžete své dotazy vyladit pro jakékoli možné zlepšení. Další informace o používání prováděcích plánů najdete v našem příspěvku: Jak číst a analyzovat prováděcí plány.


  1. Jaký je účel funkce String[] whereArgs in int (tabulka String, String whereClause, String[] whereArgs)?

  2. Jak přidat výchozí omezení do existujícího sloupce na serveru SQL Server

  3. Vyhněte se pojmenování uživatelských uložených procedur SP% nebo SP_%

  4. Jak načíst soubor XML do databáze pomocí balíčku SSIS?