Sdílet prostřednictvím


Upgrade databází pomocí Pomocníka pro ladění dotazů

platí pro: SQL Server 2016 (13.x) a novější verze

Při migraci ze starší verze SQL Serveru na SQL Server 2014 (12.x) nebo novějších verzí a upgrade úrovně kompatibility databáze na nejnovější dostupnou verzi může být úloha vystavena riziku regrese výkonu. Při upgradu mezi SQL Serverem 2014 (12.x) a jakoukoli novější verzí je to možné i méně.

V SQL Serveru 2014 (12.x) a novějších verzích jsou všechny změny optimalizátoru dotazů omezené na nejnovější úroveň kompatibility databáze, takže plány provedení se při upgradu nezmění, ale pouze když uživatel změní COMPATIBILITY_LEVEL možnost databáze na nejnovější dostupnou. Další informace o změnách optimalizátoru dotazů zavedených v SQL Serveru 2014 (12.x) najdete v tématu Odhad kardinality (SQL Server). Pro více informací o úrovních kompatibility a o tom, jak mohou ovlivnit modernizace, si přečtěte Úrovně kompatibility a Modernizace databázového enginu.

Tato funkce řízení poskytovaná úrovní kompatibility databáze ve spojení s úložištěm dotazů vám umožňuje mít vysokou kontrolu nad výkonem dotazů během procesu upgradu, pokud upgrade postupuje podle doporučeného postupu uvedeného v následujícím diagramu. Další informace o doporučeném pracovním postupu pro upgrade úrovně kompatibility najdete v tématu Změna úrovně kompatibility databáze a použití úložiště dotazů.

Diagram doporučeného pracovního postupu upgradu databáze pomocí úložiště dotazů

Tato kontrola nad upgrady byla dále vylepšena pomocí SQL Serveru 2017 (14.x), kde bylo zavedeno automatické ladění a umožňuje automatizaci posledního kroku v doporučeném pracovním postupu.

Počínaje aplikací SQL Server Management Studio v18 vás funkce Pomocníka pro ladění dotazů (QTA) provede doporučeným pracovním postupem, aby během upgradu na novější verze SQL Serveru zachovala stabilitu výkonu, jak je popsáno v oddílu Zachování stability výkonu během upgradu na novější verze SQL Serveru v části Scénáře použití úložiště dotazů. QTA se ale nevrátí zpět k dříve známému dobrému plánu, jak je patrné z předchozího kroku doporučeného pracovního postupu. Místo toho QTA sleduje všechny regrese nalezené v zobrazení Regresní dotazy úložiště dotazů a prochází možné permutace použitelné varianty modelu optimalizátoru, aby bylo možné vytvořit nový lepší plán.

Důležitý

QTA negeneruje uživatelské úlohy. Pokud používáte QTA v prostředí, které vaše aplikace nepoužívají, ujistěte se, že můžete na cílovém databázovém stroji SQL Serveru spustit reprezentativní testovací úlohu jiným způsobem.

Pracovní postup Pomocníka pro ladění dotazů

Výchozí bod QTA předpokládá, že databáze z předchozí verze SQL Serveru se přesune (prostřednictvím příkazu Připojit databázi nebo RESTORE) do novější verze databázového stroje SQL Serveru a úroveň kompatibility databáze před upgradem se okamžitě nezmění. QTA vás provede následujícími kroky:

  1. Nakonfigurujte úložiště dotazů podle doporučených nastavení pro dobu trvání úlohy (ve dnech) nastavených uživatelem. Zamyslete se nad dobou trvání úloh, která odpovídá vašemu typickému obchodnímu cyklu.

  2. Požádejte o spuštění požadované úlohy, aby úložiště dotazů mohl shromáždit směrný plán dat úloh (pokud ještě není k dispozici).

  3. Upgradujte na úroveň kompatibility cílové databáze zvolenou uživatelem.

  4. Požádejte o shromáždění dat o zatížení pro druhý průchod za účelem porovnání a detekce regrese.

  5. Iterujte přes jakékoli regrese nalezené na základě zobrazení úložiště dotazů dotazů s regresí, experimentujte sběrem runtime statistik pro možné permutace použitelných variant modelu optimalizátoru a změřte výsledek.

  6. Podávání zpráv o měřených vylepšeních a volitelné umožnění zachování těchto změn pomocí plánovacích průvodců .

Další informace o připojení databáze naleznete v tématu Odpojení databáze a připojení.

Následující diagram ukazuje, jak QTA mění poslední kroky doporučeného pracovního postupu pro upgrade úrovně kompatibility pomocí úložiště dotazů, které jsme viděli dříve. Místo výběru mezi aktuálně neefektivním plánem provádění a posledním známým dobrým plánem provádění nabízí QTA možnosti ladění, které jsou specifické pro vybrané regresní dotazy, a vytvoří tak nový vylepšený stav s vyladěnými plány provádění.

Diagram doporučeného pracovního postupu upgradu databáze pomocí QTA

Ladění interního vyhledávacího prostoru QTA

QTA se zaměřuje pouze na dotazy SELECT, které lze spouštět z úložiště dotazů. Parametrizované dotazy jsou způsobilé, pokud je zkompilovaný parametr známý. Dotazy, které jsou závislé na konstruktorech modulu runtime, jako jsou dočasné tabulky nebo proměnné tabulky, nejsou v tuto chvíli způsobilé.

QTA cílí na možné známé vzory regresí dotazů v důsledku změn ve verzích odhadu kardinality (SQL Server). Například při upgradu databáze ze SQL Serveru 2012 (11.x) s úrovní kompatibility pro databázi 110 na SQL Server 2017 (14.x) s úrovní kompatibility pro databázi 140 může docházet k regresi některých dotazů, protože byly navrženy speciálně pro práci s verzí CE, která existovala v SQL Serveru 2012 (11.x) (CE 70). To neznamená, že vrácení z CE 140 na CE 70 je jedinou možností. Pokud regresi zavádí jenom určitá změna v novější verzi, je možné naznačit, že tento dotaz bude používat jenom relevantní část předchozí verze CE, která fungovala lépe pro konkrétní dotaz, a přesto používat všechna další vylepšení novějších verzí CE. A také umožněte dalším dotazům v pracovní zátěži, které nevykazují zhoršení, těžit z novějších vylepšení CE.

Vzory CE, které hledá QTA, jsou:

  • Nezávislost vs. korelace: Pokud předpoklad nezávislosti poskytuje lepší odhady pro konkrétní dotaz, pak tip USE HINT ('ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES') dotazu způsobí, že SQL Server vygeneruje plán provádění s využitím minimální selektivity při odhadu AND predikátů pro filtry, které budou zohledňovat korelaci. Další informace naleznete v tématu Použití nápovědy pro dotazy a Verze CE.

  • Jednoduché uzavření vs. základní omezení: Pokud jiná omezení spojení poskytuje lepší odhady pro konkrétní dotaz, pak tip USE HINT ('ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS') dotazu způsobí, že SQL Server vygeneruje plán provádění s použitím předpokladu jednoduchého zahrnutí místo výchozího předpokladu základního zahrnutí. Další informace naleznete v tématu Použití nápovědy pro dotazy a Verze CE.

  • Funkce s více příkazy vracející tabulku (MSTVF) s fixním odhadem kardinality 100 řádků vs. 1 řádek: Pokud výchozí fixní odhad pro TVF se 100 řádky nevede k efektivnějšímu plánu než použití fixního odhadu pro TVF s 1 řádkem (což odpovídá výchozímu nastavení v modelu optimalizace dotazů SQL Serveru 2008 R2 (10.50.x) a starších verzí), pak se k vygenerování plánu provádění použije nápověda dotazu QUERYTRACEON 9488. Další informace o MSTVFs naleznete viz Vytvoření uživatelsky definovaných funkcí (databázový stroj).

Pokud úzce vymezené nápovědy nepřinášejí dostatečně dobré výsledky pro vhodné vzory dotazů, je jako poslední možnost považováno plné využití CE 70 pomocí nápovědy dotazu USE HINT ('FORCE_LEGACY_CARDINALITY_ESTIMATION') pro vygenerování plánu provádění.

Důležitý

Jakákoli nápověda vynutí určité chování, které by mohlo být vyřešeno v budoucích aktualizacích SQL Serveru. Doporučujeme použít pouze tipy, pokud neexistuje žádná jiná možnost, a plánujte znovu zkontrolovat kód s každým novým upgradem. Vynucením chování můžete zabránit své úloze využít výhod vylepšení zavedených v novějších verzích SQL Serveru.

Spuštění Pomocníka pro ladění dotazů pro upgrady databáze

QTA je funkce založená na relacích, která ukládá stav relace do msqta schématu uživatelské databáze, ve které se relace vytvoří poprvé. V jedné databázi lze v průběhu času vytvořit více relací ladění, ale pro libovolnou databázi může existovat pouze jedna aktivní relace.

Vytvořte sezení aktualizace databáze

  1. V aplikaci SQL Server Management Studio otevřete Průzkumník objektů a připojte se k databázovému stroji.

  2. Pro databázi, u které chcete aktualizovat úroveň kompatibility, klikněte pravým tlačítkem myši na název databáze, vyberte Úlohy, poté Upgrade databázea nakonec Nová relace upgradu databáze.

  3. V okně Průvodce QTA je třeba ke konfiguraci relace provést dva kroky:

    1. V okně nastavení nakonfigurujte úložiště dotazů tak, aby zachytilo ekvivalent jednoho úplného obchodního cyklu dat úloh k analýze a ladění.

      • Zadejte očekávanou dobu trvání úlohy ve dnech (minimálně 1 den). Používá se k návrhu doporučených nastavení Query Store, která provizorně umožní shromáždění celé základní linie. Zachycení dobré základní úrovně je důležité k tomu, aby jakékoliv dotazy s regresí výkonu, nalezené po změně úrovně kompatibility databáze, mohly být analyzovány.

      • Po dokončení pracovního postupu QTA nastavte požadovanou úroveň kompatibility cílové databáze, na které by měla být uživatelská databáze.

      Po dokončení vyberte Další.

      Snímek obrazovky s oknem Nastavení nové relace upgradu databáze

    2. V okně Nastavení dva sloupce zobrazují aktuální stav úložiště dotazů v cílové databázi a doporučená nastavení.

      • Doporučená nastavení jsou vybrána jako výchozí, ale výběr radiového tlačítka ve sloupci Aktuální nastavení přijímá současná nastavení a také umožňuje dokonaleji nastavit současnou konfiguraci úložiště dotazů.

      • Navrhované nastavení prahové hodnoty zastaralého dotazu je dvakrát očekávaná hodnota doby trvání úlohy ve dnech. Důvodem je to, že úložiště dotazů potřebuje uchovávat informace o základní úloze a úloze po upgradu databáze.

      Po dokončení vyberte Další.

      Snímek obrazovky s oknem Nastavení upgradu nové databáze

      Důležitý

      Navrhovaná maximální velikost je libovolná hodnota, která by mohla být vhodná pro krátkou úlohu. "Nemusí však být dostatečné uchovávat informace o základních úlohách a výkonu po upgradu databáze pro náročné úlohy, zejména když může být generováno mnoho různých plánů." Pokud předpokládáte, že to bude případ, zadejte vyšší hodnotu, která je vhodná.

  4. Okno Ladění uzavírá konfiguraci relace a poskytuje pokyny k dalším krokům pro otevření a pokračování v procesu relace. Až budete hotovi, vyberte Dokončit.

    Snímek obrazovky s oknem ladění nového upgradu databáze

Proveďte pracovní postup upgradu databáze

  1. Pro databázi, která je určena k upgradu úrovně kompatibility databáze, klikněte pravým tlačítkem myši na název databáze, vyberte Úlohy, vyberte Upgrade databázea vyberte Monitorování relací.

  2. Stránka správy relací obsahuje seznam aktuálních a minulých relací pro databázi v oboru. Vyberte požadovanou relaci a klepněte na Podrobnosti.

    Poznámka

    Pokud není k dispozici aktuální sezení, vyberte tlačítko Aktualizovat.

    Seznam obsahuje následující informace:

    • ID relace

    • název relace: Systémový vygenerovaný název se skládá z názvu databáze, data a času vytvoření relace.

    • Stav: Stav relace (aktivní nebo uzavřená).

    • Popis: Systém vygenerovaný se skládá z úrovně kompatibility cílové databáze vybrané uživatelem a počtu dnů pro úlohy obchodního cyklu.

    • Čas zahájení: Datum a čas vytvoření relace.

    Snímek obrazovky se stránkou správy relací QTA

    Poznámka

    Odstranit relaci odstraní všechna data uložená pro vybranou relaci. Odstraněním uzavřené relace se ale neodstraní žádné dříve zavedené pokyny k plánu. Pokud odstraníte relaci, která nasadila příručky k plánu, nemůžete funkci QTA použít k vrácení zpět. Místo toho pomocí systémové tabulky sys.plan_guides vyhledejte příručky plánu a odstraňte je ručně pomocí sp_control_plan_guide.

  3. Vstupním bodem pro novou relaci je krok shromažďování dat.

    Poznámka

    Tlačítko Sessions se vrátí na stránku správy relací a aktivní relace zůstane nezměněna.

    Tento krok obsahuje tři dílčí kroky:

    1. Shromažďování základní linie dat požádá uživatele o spuštění reprezentativního cyklu úloh, aby úložiště dotazů mohlo shromáždit základní linii. Jakmile se úloha dokončí, zkontrolujte Dokončeno spuštění úlohy a vyberte Další.

      Poznámka

      Okno QTA je možné zavřít během spuštění úlohy. Návrat do relace, která zůstává v aktivním stavu, v pozdějším čase pokračuje od stejného kroku, kde byl přerušen.

      Snímek obrazovky QTA – krok 2 – dílčí krok 1

    2. Upgrade Database vyžádá si oprávnění k upgradu úrovně kompatibility databáze na požadovanou úroveň. Pokud chcete přejít k dalšímu dílčímu kroku, vyberte Ano.

      Snímek obrazovky s 2. krokem QTA – Dílčí krok 2 – Upgrade úrovně kompatibility databáze

      Následující stránka potvrzuje, že úroveň kompatibility databáze byla úspěšně upgradována.

      Snímek obrazovky QTA, krok 2, dílčí krok 2

    3. Pozorované shromažďování dat žádá uživatele, aby znovu spustil reprezentativní cyklus úloh, aby úložiště dotazů mohl shromáždit srovnávací směrný plán, který se používá k hledání příležitostí optimalizace. Při provádění úloh použijte tlačítko Aktualizovat k neustálé aktualizaci seznamu dotazů s regresí, pokud byly nějaké nalezeny. Změňte Dotazy tak, aby zobrazovaly hodnotu, aby se omezil počet zobrazených dotazů. Pořadí seznamu je ovlivněno metrikou (doba trvání nebo čas procesoru) a agregace (výchozí hodnota je průměr). Vyberte také, kolik dotazů se má zobrazit. Jakmile se úloha dokončí, zkontrolujte Dokončení běhu úlohy a vyberte Další.

      Snímek obrazovky QTA – krok 2 – dílčí krok 3

      Seznam obsahuje následující informace:

      • ID dotazu

      • Text dotazu: tvrzení Transact-SQL, které lze rozbalit kliknutím na tlačítko ....

      • Vykonání: Zobrazí počet vykonání tohoto dotazu v celé kolekci zátěží.

      • Základní metrika: Vybraná metrika (Doba trvání nebo Čas procesoru) v ms pro shromažďování dat před aktualizací kompatibility databáze.

      • pozorovaná metrika: Vybraná metrika (Doba trvání nebo CPU čas) v milisekundách při shromažďování dat po upgradu kompatibility databáze.

      • % Změnit: Procentuální změna pro vybranou metriku mezi stavem upgradu kompatibility databáze před a po. Záporné číslo představuje množství měřené regrese dotazu.

      • Laditelný: Pravdivý nebo Nepravdivý podle toho, zda je dotaz vhodný pro experimentování.

  4. Zobrazit analýzu umožňuje výběr dotazů k experimentování a hledání příležitostí optimalizace. Dotazy k zobrazení se stanou rozsahem způsobilých dotazů pro experimentování. Jakmile jsou požadované dotazy zaškrtnuté, vyberte Další a spusťte experimentování.

    Pro experimentování nejdou vybrat dotazy s možností Ladění nastavenou na False .

    Důležitý

    Upozornění uvádí, že jakmile se funkce QTA přesune do fáze experimentování, návrat na stránku Zobrazit analýzu není možný. Pokud před přechodem do fáze experimentování nevyberete všechny oprávněné dotazy, budete muset později vytvořit novou relaci a opakovat pracovní postup. To vyžaduje resetování úrovně kompatibility databáze na předchozí hodnotu.

    Snímek obrazovky kroku 3 v QTA

  5. Zobrazit zjištění umožňuje výběr dotazů, na které se aplikuje navrhovaná optimalizace jako průvodce plánem.

    Seznam obsahuje následující informace:

    • ID dotazu

    • Text dotazu: tvrzení Transact-SQL, které lze rozbalit kliknutím na tlačítko ....

    • Stav: Zobrazí aktuální stav experimentování dotazu.

    • Základní metrika: Vybraná metrika (Doba trvání nebo CpuTime) v ms pro dotaz, jak je proveden v kroku 2, dílčí krok 3, což představuje regresní dotaz po upgradu kompatibility databáze.

    • pozorovaná metrika: Vybraná metrika (Doba trvání nebo Čas procesoru) v ms pro dotaz po provedení experimentu, pro dostatečně dobrou navrhovanou optimalizaci.

    • % Změna: Určuje procentuální změnu pro vybranou metriku mezi stavem před a po experimentování, která představuje množství měřeného zlepšení dotazu s navrženou optimalizací.

    • možnost dotazu: Odkaz na navrženou nápovědu, která zlepšuje metriku provádění dotazů.

    • Může nasadit: true nebo false v závislosti na tom, jestli je možné navrženou optimalizaci dotazů nasadit jako průvodce plánem.

    Snímek obrazovky s QTA – krok 4

  6. Ověření ukazuje stav nasazení dříve vybraných dotazů v této relaci. Seznam na této stránce se liší od předchozí stránky změnou sloupce Může nasadit na Může vrátit zpět. Tento sloupec může být True nebo False v závislosti na tom, zda lze nasazenou optimalizaci dotazů vrátit zpět a odebrat její vodítko plánu.

    Snímek obrazovky s QTA – krok 5

    Pokud je potřeba vrátit se k navrhované optimalizaci později, vyberte příslušný dotaz a vyberte Vrácení zpět. Průvodce plánem dotazu se odebere a seznam bude aktualizován, aby se odstranil vrácený dotaz. Všimněte si na následujícím obrázku, že dotaz 8 byl odebrán.

    Snímek obrazovky kroku 5 QTA - rollback

    Poznámka

    Odstraněním uzavřené relace se neodstraní žádné dříve nasazené příručky k plánu. Pokud odstraníte relaci, která nasadila vodítka plánu, nemůžete použít funkci QTA k návratu zpět. Místo toho pomocí systémové tabulky sys.plan_guides vyhledejte příručky plánu a odstraňte je ručně pomocí sp_control_plan_guide.

Dovolení

Vyžaduje členství v roli db_owner.