Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro: SQL Server 2022 (16.x) a novější verze
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
Tento článek podrobně popisuje osvědčené postupy pro použití nápovědy k úložišti dotazů. Rady úložiště dotazů umožňují tvarování obrazců plánu dotazů beze změny kódu aplikace.
- Další informace o konfiguraci a správě pomocí úložiště dotazů najdete v tématu Monitorování výkonu pomocí úložiště dotazů.
- Informace o zjišťování informací umožňujících akci a ladění výkonu pomocí úložiště dotazů naleznete v tématu Ladění výkonu pomocí úložiště dotazů.
- Obecné osvědčené postupy pro úložiště dotazů najdete v tématu Osvědčené postupy pro monitorování úloh pomocí úložiště dotazů.
Případy použití tipů pro Úložiště dotazů
Zvažte následující případy použití jako ideální nápovědy pro Query Store. Další informace naleznete v části Kdy použít rady pro Úložiště dotazů.
Caution
Vzhledem k tomu, že optimalizátor dotazů SQL Serveru obvykle vybírá nejlepší plán provádění dotazu, doporučujeme jako poslední možnost použít pouze rady pro zkušené vývojáře a správce databází. Další informace najdete v tématu Nápovědy k dotazům.
Pokud kód nelze změnit
Použití nápovědy k úložišti dotazů umožňuje ovlivnit plány provádění dotazů beze změny kódu aplikace nebo databázových objektů. Žádná další funkce neumožňuje rychle a snadno použít nápovědy k dotazům.
Pomocí tipů úložiště dotazů můžete například využít úlohy extrakce a transformace (ETL) bez opětovného nasazení kódu. V tomto 14minutovém videu se dozvíte, jak zvýšit efektivitu hromadného načítání pomocí hintů Query Store.
Rady úložiště dotazů jsou jednoduché metody ladění dotazů, ale pokud se dotaz stane problematickým, měl by být vyřešen s podstatnějšími změnami kódu. Pokud pravidelně zjišťujete, že je nutné použít rady pro úložiště dotazů, zvažte zásadní úpravu dotazu. Optimalizátor dotazů SQL Serveru obvykle vybere nejlepší plán provádění dotazu. Doporučujeme používat pouze rady jako poslední možnost pro zkušené vývojáře a správce databází.
Informace o tom, které rady dotazů lze použít, naleznete v tématu Podporované rady dotazů.
Při vysoké zátěži transakcí nebo u kriticky důležitého kódu
Pokud jsou změny kódu nepraktické kvůli vysokým požadavkům na provozní dobu nebo transakčnímu zatížení, můžou návěští úložiště dotazů rychle použít dotazové náznaky na stávající zátěž dotazů. Přidávání a odebírání nápověd úložiště dotazů je snadné.
Do Úložiště Dotazů je možné přidat a odebrat nápovědy k dotazům v dávkách, aby byl výkon přizpůsoben časovým úsekům určeným pro náhlé zvýšení pracovní zátěže.
Jako náhrada za plánovací průvodce
Před představením nápověd úložiště dotazů musel vývojář spoléhat na plánové vodítka k provádění podobných úloh, což může být složité použít. Nápovědy k úložišti dotazů jsou integrované s funkcemi úložiště dotazů aplikace SQL Server Management Studio (SSMS) pro vizuální zkoumání dotazů.
Pomocí průvodců plánem je nutné prohledávat všechny plány pomocí fragmentů dotazů. Funkce nápovědy k úložišti dotazů nevyžaduje přesné odpovídající dotazy, které by ovlivnily výsledný plán dotazů. Poznámky úložiště dotazů lze aplikovat na query_id v datové sadě úložiště dotazů.
Query Store nápovědy převyšují pevně zakódované nápovědy na úrovni příkazů a stávající průvodce plánem.
Zvažte novější úroveň kompatibility.
Nápovědy k úložišti dotazů můžou být cennou metodou, když vám není k dispozici novější úroveň kompatibility databáze, například kvůli specifikaci dodavatele nebo větším zpožděním testování. Pokud je pro databázi k dispozici vyšší úroveň kompatibility, zvažte upgrade úrovně kompatibility databáze jednotlivých dotazů, abyste využili nejnovějších optimalizací výkonu a funkcí SQL Serveru.
Pokud máte například instanci SQL Serveru 2022 (16.x) s databází na úrovni kompatibility 140, můžete přesto pomocí tipů úložiště dotazů spouštět jednotlivé dotazy na úrovni kompatibility 160. Můžete použít následující nápovědu:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION(USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_160''))';
Pro úplný výukový program se podívejte na příklady tipů pro úložiště dotazů.
Po upgradu zvažte starší úroveň kompatibility.
Další případ, kdy vám můžou pomoct rady úložiště dotazů, je místo, kde se dotazy nedají upravovat přímo po migraci nebo upgradu instance SQL Serveru. Použijte tipy úložiště dotazů k použití předchozí úrovně kompatibility pro dotaz, dokud nemůže být přepsán nebo jinak upraven tak, aby fungoval dobře na nejnovější úrovni kompatibility. Identifikujte odlehlé dotazy, které se zhoršily při vyšší úrovni kompatibility, pomocí sestavy úložiště dotazů o zhoršených dotazech, nástroje Pomocník pro ladění dotazů během migrace, nebo jiné telemetrie na úrovni dotazů. Další informace o rozdílech mezi úrovněmi kompatibility najdete v tématu Rozdíly mezi úrovněmi kompatibility.
Po testování výkonu nové úrovně kompatibility a nasazení tipů úložiště dotazů tímto způsobem můžete upgradovat úroveň kompatibility celé databáze a zachovat klíčové problematické dotazy na předchozí úrovni kompatibility bez jakýchkoli změn kódu.
Blokovat budoucí spuštění problematických dotazů
Pomocí nápovědy ABORT_QUERY_EXECUTION k dotazu můžete blokovat budoucí spuštění známých problematických dotazů, například nepodstatných dotazů, které způsobují vysokou spotřebu prostředků a ovlivňují kritické aplikační úlohy.
Note
Nápověda k ABORT_QUERY_EXECUTION dotazu je dostupná jenom v Azure SQL Database, Azure SQL Managed InstanceAUTD a SQL Serveru 2025 (17.x).
Pokud chcete například blokovat budoucí spuštění query_id 39, spusťte sys.sp_query_store_set_hints následujícím způsobem:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION (USE HINT (''ABORT_QUERY_EXECUTION''))';
Pokud chcete stejný dotaz odblokovat, spusťte sys.sp_query_store_clear_hints:
EXECUTE sys.sp_query_store_clear_hints @query_id = 39;
Další informace naleznete v příkladech s použitím nápovědy Úložiště dotazů.
Vezměte na vědomí následující:
Když zadáte tento tip pro dotaz, pokus o spuštění dotazu selže s chybou 8778, závažností 16, spuštění dotazu bylo přerušeno, protože byl zadán ABORT_QUERY_EXECUTION tip.
Pokud chcete odblokovat dotaz, můžete smazat nápovědu předáním hodnoty
query_iddo parametru@query_idv uložené proceduře sys.sp_query_store_clear_hints.- Tato uložená procedura vymaže všechny indikátory pro dotaz. Pokud chcete zachovat stávající rady při odblokování dotazu, použijte sys.sp_query_store_set_hints, odeberte nápovědu
ABORT_QUERY_EXECUTION, ale ponechte další rady.
- Tato uložená procedura vymaže všechny indikátory pro dotaz. Pokud chcete zachovat stávající rady při odblokování dotazu, použijte sys.sp_query_store_set_hints, odeberte nápovědu
Systémová zobrazení můžete použít k vyhledání dotazů v úložišti dotazů, které jsou blokované, jako v následujícím příkladu dotazu:
SELECT qsh.query_id, q.query_hash, qt.query_sql_text FROM sys.query_store_query_hints AS qsh INNER JOIN sys.query_store_query AS q ON qsh.query_id = q.query_id INNER JOIN sys.query_store_query_text AS qt ON q.query_text_id = qt.query_text_id WHERE UPPER(qsh.query_hint_text) LIKE '%ABORT[_]QUERY[_]EXECUTION%';Pokud chcete získat
query_idhodnotu, musí být v úložišti dotazů zaznamenáno aspoň jedno spuštění dotazu. Toto spuštění nemusí být úspěšné. To znamená, že budoucí spuštění dotazů, které vypršely nebo byly zrušeny, lze zablokovat.Pokud potřebujete blokovat nebo odblokovat všechny dotazy s konkrétní hodnotou hash dotazu, zvažte použití automatizačního skriptu. Například dbo.sp_query_store_modify_hints_by_query_hash je ukázková uložená procedura, která ve smyčce volá systémové uložené procedury
sys.sp_query_store_set_hintsasys.sp_query_store_clear_hintspro všechnyquery_idhodnoty odpovídající hodnotě hash dotazu.Pokud se dotaz už provádí, když ho zablokujete, jeho spuštění pokračuje. K přerušení dotazu můžete použít příkaz KILL .
- Provádění zrušených dotazů není v úložišti dotazů zaznamenáno. Pokud dotaz ještě není v úložišti dotazů, musíte nechat dotaz dokončit nebo vypršet časový limit, abyste získali
query_id, který můžete zablokovat.
- Provádění zrušených dotazů není v úložišti dotazů zaznamenáno. Pokud dotaz ještě není v úložišti dotazů, musíte nechat dotaz dokončit nebo vypršet časový limit, abyste získali
Pokud je dotaz zablokován nápovědou
ABORT_QUERY_EXECUTION, sloupceexecution_typeaexecution_type_descv zobrazení sys.query_store_runtime_stats jsou nastaveny na hodnotu 4 a Výjimka.Stejně jako u všech hintů Query Store musíte mít
ALTERoprávnění v databázi k nastavení a vymazání nápovědyABORT_QUERY_EXECUTION.
Úvahy o nápovědách k úložišti dotazů
Při nasazování nápověd Query Store zvažte následující scénáře.
Změny distribuce dat
Průvodce plánů, vynucené plány prostřednictvím úložiště dotazů a tipy úložiště dotazů přepisují rozhodování optimalizátoru. Úložiště dotazů může být nyní užitečné, ale ne v budoucnu. Pokud například hint v Úložišti dotazů pomáhá dotazu při předchozí distribuci dat, může to být kontraproduktivní, pokud operace DML ve velkém měřítku změní data. Nová distribuce dat může způsobit, že optimalizátor udělá lepší rozhodnutí než nápověda. Tento scénář je nejběžnějším důsledkem vynucení chování plánování.
Pravidelně přehodnocujte strategii použití nápověd Query Store.
V následujících případech znovu vyhodnoťte stávající strategii hintů Query Store:
- Po známých změnách distribuce velkých objemů dat
- Pokud se prostředky dostupné pro databázi změní. Například když se změní velikost výpočetních prostředků služby Azure SQL Database, SQL Managed Instance nebo virtuálního počítače s SQL Serverem.
- Kde se opravy plánů staly dlouhodobými. "Query Store hints jsou nejlépe využitelné pro krátkodobé opravy."
- Neočekávané regrese výkonu
Potenciál širokého dopadu
Rady úložiště dotazů ovlivňují všechna spuštění dotazu bez ohledu na sadu parametrů, zdrojovou aplikaci, uživatele nebo sadu výsledků. V případě neúmyslné regrese výkonu lze rady úložiště dotazů vytvořené pomocí sys.sp_query_store_set_hints snadno odebrat pomocí sys.sp_query_store_clear_hints.
Před použitím nápověd Úložiště dotazů v produkčním prostředí pečlivě provádějte zátěžové testování změn pro důležité nebo citlivé systémy.
Vynucené parametrizace a nápověda RECOMPILE nejsou podporovány.
Použití RECOMPILE náznaku dotazu s náznaky úložiště dotazů není podporováno, když je možnost PARAMETRIZACE databáze nastavena na VYNUCENO. Další informace naleznete v tématu Pokyny pro použití vynucené parametrizace.
Nápověda RECOMPILE není kompatibilní s vynucenou parametrizací nastavenou na úrovni databáze. Pokud databáze používá vynucenou parametrizaci a RECOMPILE nápověda je součástí řetězce nápověd nastaveného v úložišti dotazů pro dotaz, databázový stroj ignoruje nápovědu RECOMPILE a použije další nápovědy, pokud jsou zadány. Kromě toho se od července 2022 ve službě Azure SQL Database vydává upozornění (kód chyby 12461), která hlásí, že RECOMPILE se nápověda ignorovala.
Informace o tom, které rady dotazů lze použít, naleznete v tématu Podporované rady dotazů.