Rozhodněte se, jestli je pomocník pro ladění dotazů (QTA) pro vás nejvhodnější.

Dokončeno

Znáte potenciální regresi plánu dotazů a ztrátu výkonu po upgradech verzí databáze. Pokud chcete dosáhnout lepšího výkonu po upgradu databáze, musíte najít nejlepší metodu pro identifikaci a zmírnění nižšího výkonu dotazů. Tato lekce popisuje, jak můžete pomocí Pomocníka pro ladění dotazů (QTA) zajistit, aby po upgradu nebylo problém s nižším výkonem.

Začínáme s úložištěm dotazů a Pomocníkem pro ladění dotazů

QTA závisí na datech úložiště dotazů a vyhledá dotazy, které se po upgradu vrátí. Úložiště dotazů umožňuje shromažďovat metriky starší verze databáze před upgradem.

Úložiště dotazů bylo zavedeno v SQL Serveru 2016 a QTA byl představen v SQL Serveru 2017. Každá verze databáze, která běží na instanci SQL Serveru 2022, může používat obě tyto funkce. Tyto nástroje jsou integrované do aplikace SQL Server Management Studio (SSMS) a fungují na úrovni databáze.

Úroveň kompatibility databáze určuje její verzi, která následně určuje verzi nástroje pro posouzení kardinality, kterou používá. Odhad kardinality předpovídá, kolik řádků dotaz pravděpodobně vrátí, takže optimalizátor dotazů může vybrat plán s nejnižšími náklady. SQL Server 2014 zavedl upgradovaný algoritmus estimátoru kardinality, který využívá většinu dotazů, ale může mít zřídka negativní dopad na výkon.

Kvůli měření dopadu na výkon sestaví úložiště dotazů dotazy a dotazy, které spotřebovávají nejvíce systémových prostředků. QTA porovnává data výkonu dotazů úložiště dotazů před upgradem a po upgradu databáze a experimentuje s dotazy za účelem zvýšení výkonu.

Poznámka:

QTA není k dispozici pro databáze Azure SQL Database nebo SQL Managed Instance. U těchto databází zvažte použití rozšíření migrace Azure SQL pro Azure Data Studio.

Oprava QTA a automatického plánu

Když SQL Server spustí dotaz Transact-SQL (T-SQL), analyzuje možné plány, které mohou dotaz spustit. SQL Server ukládá plány pro dotazy, které se úspěšně spouštějí a opakovaně používají při opětovném spuštění dotazů.

SQL Server vybere optimální plán dotazu a použije ho, dokud ho okolnosti nenanutí vybrat nový. Mezi tyto okolnosti může patřit rekompiace plánu databázového stroje, přidání nebo odebrání indexu nebo změna statistiky.

Nemusí vždy platit, že nový plán je lepší než starý. Spuštěním následujícího příkazu můžete vyhledat dotazy, které mají plán s nižším přenosem dat.

SELECT * FROM sys.dm_db_tuning_recommendations

Uloženou proceduru sp_force_plan pak můžete použít k vynucení použití doporučeného konkrétního plánu SQL Server.

EXEC sp_force_plan @query_id = 1187, @plan_id = 1975

Tento sp_force_plan postup je ruční proces, který je potenciálně zdlouhavý, pokud se u upgradované databáze provádí regrese mnoha dotazů. SQL Server 2017 zavedl novou funkci s názvem automatická oprava plánu pro automatické ladění dotazů a odebrání nutnosti ručního zásahu. Automatickou opravu plánu pro databázi můžete povolit spuštěním následujícího příkazu:

ALTER DATABASE <database-name> SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON)

Při nastavení na úrovni databáze automatická oprava plánu dává SQL Serveru pokyn, aby používal poslední dobrý plán dotazu. SQL Server nadále monitoruje plán a zjišťuje regrese během provádění plánu a zajišťuje optimální výkon.

Automatická oprava plánu funguje jinak než QTA. Použití posledního dobrého plánu může znamenat návrat k dřívějšímu estimátoru kardinality. QTA naopak provede experimenty pomocí verze estimátoru kardinality, která je namapovaná na úroveň kompatibility cílové databáze.

Shrnutí

QTA je k dispozici v SQL Serveru 2022 a závisí na úložišti dotazů, které má fungovat. QTA musí mít základní data úložiště dotazů pro databázi na předchozí úrovni kompatibility, aby bylo možné sledovat dotazy a provádět porovnání po upgradu.

Automatická oprava plánu zavedená v SQL Serveru 2017 eliminuje potřebu ruční identifikace a vynucení plánu dotazu. Automatickou opravu plánu je možné povolit na úrovni databáze, ale může se vrátit zpět verze nástroje pro posouzení kardinality. QTA používá verzi estimátoru kardinality, která je namapovaná na cílovou úroveň kompatibility.