Popis inteligentního zpracování dotazů
V SQL Serveru 2017 a 2019 a s Azure SQL microsoft zavedl mnoho nových funkcí na úrovni kompatibility 140 a 150. Mnoho z těchto funkcí opravuje, co bylo dříve anti-vzory, jako je použití uživatelem definovaných skalárních hodnot funkcí a použití proměnných tabulky.
Tyto funkce se dělí do několika rodin funkcí:
Inteligentní zpracování dotazů zahrnuje funkce, které zlepšují výkon stávajících úloh s minimálním úsilím implementace.
Pokud chcete, aby úlohy byly automaticky způsobilé pro inteligentní zpracování dotazů, změňte platnou úroveň kompatibility databáze na 150. Příklad:
ALTER DATABASE [WideWorldImportersDW] SET COMPATIBILITY_LEVEL = 150;
Adaptivní zpracování dotazů
Adaptivní zpracování dotazů zahrnuje řadu možností, díky kterým je zpracování dotazů dynamičtější na základě kontextu provádění dotazu. Mezi tyto možnosti patří několik funkcí, které zlepšují zpracování dotazů.
Adaptivní spojení – databázový stroj deferuje volbu spojení mezi hodnotou hash a vnořenými smyčkami na základě počtu řádků, které do spojení přejdou. Adaptivní spojení v současné době fungují jenom v režimu dávkového spouštění.
Prokládání provádění – V současné době tato funkce podporuje funkce s hodnotami tabulky s více příkazy (MSTVF). Před SQL Serverem 2017 použil MSTVFs pevný odhad řádku jednoho nebo 100 řádků v závislosti na verzi SQL Serveru. Tento odhad by mohl vést k neoptimálním plánům dotazů, pokud funkce vrátila mnoho dalších řádků. Skutečný počet řádků se vygeneruje z MSTVF před kompilací zbytku plánu s prokládáním provádění.
Zpětná vazba k udělení paměti – SQL Server vygeneruje přidělení paměti v počátečním plánu dotazu na základě odhadů počtu řádků ze statistik. Závažná nerovnoměrná distribuce dat může vést buď k nadměrnému nebo podpočtu počtu řádků, což může způsobit nadměrné přidělení paměti, které snižují souběžnost nebo nedosahují, což může způsobit, že dotaz přelije data do databáze tempdb. Díky zpětné vazbě k udělení paměti SQL Server zjistí tyto podmínky a sníží nebo zvýší množství paměti udělené dotazu, aby se zabránilo přelití nebo přetížení.
Všechny tyto funkce jsou automaticky povoleny v režimu kompatibility 150 a nevyžadují žádné další změny, které by bylo možné povolit.
Odložená kompilace proměnné tabulky
Podobně jako MSTVFs mají proměnné tabulek v plánech provádění SQL Serveru pevný odhad počtu řádků na jednom řádku. Podobně jako MSTVFs tento pevný odhad vedl k nízkému výkonu, když proměnná měla mnohem větší počet řádků, než se čekalo. U SQL Serveru 2019 se teď analyzují proměnné tabulky a mají skutečný počet řádků. Odložená kompilace se podobá prokládání provádění msTVFs s tím rozdílem, že se provádí při první kompilaci dotazu, nikoli dynamicky v rámci plánu provádění.
Režim Batch v úložišti řádků
Režim dávkového spouštění umožňuje zpracování dat v dávkách místo řádků po řádci. Dotazy, u kterých se účtují významné náklady na procesor pro výpočty a agregace, uvidí největší výhodu tohoto modelu zpracování. Když rozdělíte dávkové zpracování a indexy columnstore, může být pro zpracování dávkového režimu přínosnější více úloh.
Vložení skalární uživatelem definované funkce
Ve starších verzích SQL Serveru skalární funkce fungovaly špatně z několika důvodů. Skalární funkce se prováděly iterativním způsobem a efektivně zpracovávaly postupně jeden řádek. V plánu provádění neměli správný odhad nákladů a nepovolili paralelismus v plánu dotazu. Při vkládání uživatelem definovaných funkcí se tyto funkce transformují na skalární poddotazy místo operátoru uživatelem definované funkce v plánu provádění. Tato transformace může vést k významnému zvýšení výkonu dotazů, které zahrnují volání skalárních funkcí.
Přibližný počet jedinečných
Běžným vzorem dotazu datového skladu je spuštění jedinečného počtu objednávek nebo uživatelů. Tento model dotazu může být pro velkou tabulku nákladný. Přibližný počet jedinečných představuje mnohem rychlejší přístup ke shromažďování jedinečného počtu seskupením řádků. Tato funkce zaručuje 2% chybovost s 97% intervalem spolehlivosti.