Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2022 (16.x) i nowsze wersje
Azure SQL Database
Azure SQL Managed Instance
SQL database w usłudze Microsoft Fabric
W tym artykule przedstawiono najlepsze praktyki dotyczące używania wskazówek dla Magazynu Zapytań . Wskazówki dotyczące magazynu zapytań umożliwiają kształtowanie kształtów planu zapytania bez modyfikowania kodu aplikacji.
- Aby uzyskać więcej informacji na temat konfigurowania magazynu zapytań i administrowania nimi, zobacz Monitorowanie wydajności przy użyciu magazynu zapytań.
- Aby uzyskać informacje na temat odnajdywania praktycznych informacji i optymalizacji wydajności w magazynie zapytań, zobacz Dostrajanie wydajności za pomocą magazynu zapytań.
- Aby uzyskać ogólne najlepsze rozwiązania dotyczące magazynu zapytań, zobacz Najlepsze rozwiązania dotyczące monitorowania obciążeń za pomocą magazynu zapytań.
Przypadki użycia wskazówek dla Query Store
Rozważ następujące przypadki użycia jako idealne podpowiedzi Query Store. Aby uzyskać więcej informacji, zobacz Kiedy używać wskazówek dotyczących Query Store.
Caution
Ponieważ optymalizator zapytań programu SQL Server zazwyczaj wybiera najlepszy plan wykonania zapytania, zalecamy używanie wskazówek tylko w ostateczności dla doświadczonych deweloperów i administratorów baz danych. Aby uzyskać więcej informacji, zobacz Wskazówki dotyczące zapytań.
Gdy nie można zmienić kodu
Korzystanie z wskazówek magazynu zapytań umożliwia wpływanie na plany wykonywania zapytań bez zmieniania kodu aplikacji lub obiektów bazy danych. Żadna inna funkcja nie umożliwia szybkiego i łatwego stosowania wskazówek dotyczących zapytań.
Możesz użyć wskazówek magazynu zapytań, na przykład, aby korzystać z obciążeń typu wyodrębnianie-przekształcanie-ładowanie (ETL), bez ponownego wdrażania kodu. Dowiedz się, jak ulepszyć ładowanie zbiorcze z pomocą wskazówek Query Store, oglądając to 14-minutowe wideo:
Wskazówki Query Store to lekkie metody dostrajania zapytań, ale jeśli zapytanie stanie się problematyczne, należy zająć się nim poprzez bardziej znaczące zmiany w kodzie. Jeśli regularnie musisz stosować podpowiedzi Query Store do zapytania, rozważ przeredagowanie większego zapytania. Optymalizator zapytań programu SQL Server zazwyczaj wybiera najlepszy plan wykonania zapytania. Zalecamy używanie wskazówek tylko w ostateczności dla doświadczonych deweloperów i administratorów baz danych.
Aby dowiedzieć się, które podpowiedzi dotyczące zapytań można zastosować, zobacz Obsługiwane podpowiedzi dotyczące zapytań.
W przypadku dużego obciążenia transakcji lub kodu o znaczeniu krytycznym
Jeśli zmiany kodu są niepraktyczne z powodu wysokich wymagań dotyczących dostępności lub obciążenia transakcyjnego, podpowiedzi Magazynu Zapytań mogą szybko zastosować podpowiedzi dotyczące zapytań do istniejących obciążeń zapytań. Dodawanie i usuwanie wskazówek Query Store jest łatwe.
Wskazówki dotyczące przechowywania zapytań można dodawać do partii i usuwać z partii zapytań w celu optymalizacji wydajności w oknach czasowych zaplanowanych na okresy wyjątkowego obciążenia.
Jako zamiennik instrukcji planu
Przed wprowadzeniem wskazówek Query Store deweloper musiałby polegać na przewodnikach planu do wykonywania podobnych zadań, które mogą być złożone w użyciu. Wskazówki dotyczące magazynu zapytań są zintegrowane z funkcjami magazynu zapytań programu SQL Server Management Studio (SSMS) w celu wizualnego eksplorowania zapytań.
W przypadku przewodników dotyczących planu konieczne jest przeszukiwanie wszystkich planów przy użyciu fragmentów zapytań. Funkcja wskazówek magazynu zapytań nie wymaga dokładnego dopasowania zapytań, aby wpłynąć na wynikowy plan zapytania. Wskazówki magazynu zapytań można zastosować do query_id w bazie danych magazynu zapytań.
Podpowiedzi magazynu zapytań zastępują zakodowane na stałe podpowiedzi na poziomie instrukcji oraz istniejące wskazówki dotyczące planu.
Rozważ nowszy poziom zgodności
Wskazówki dotyczące Query Store mogą być cenną metodą, gdy nowszy poziom zgodności bazy danych nie jest dostępny ze względu na specyfikację dostawcy lub większe opóźnienia w testowaniu, na przykład. Jeśli dla bazy danych jest dostępny wyższy poziom zgodności, rozważ uaktualnienie poziomu zgodności bazy danych pojedynczego zapytania, aby skorzystać z najnowszych optymalizacji wydajności i funkcji programu SQL Server.
Jeśli na przykład masz wystąpienie programu SQL Server 2022 (16.x) z bazą danych na poziomie zgodności 140, nadal możesz używać podpowiedzi Query Store, aby uruchamiać poszczególne zapytania na poziomie zgodności 160. Możesz użyć następującej wskazówki:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION(USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_160''))';
Aby uzyskać kompletny samouczek, zobacz Wskazówki dotyczące magazynu zapytań Przykłady.
Rozważ starszy poziom zgodności po uaktualnieniu
Innym przypadkiem, w którym podpowiedzi Query Store mogą pomóc, jest sytuacja, gdy zapytania nie mogą być modyfikowane bezpośrednio po migracji lub uaktualnieniu wystąpienia programu SQL Server. Użyj wskazówek magazynu zapytań, aby zastosować poprzedni poziom zgodności dla zapytania, dopóki nie będzie można go przepisać lub w inny sposób zaadresować w celu zapewnienia dobrego działania na najnowszym poziomie zgodności. Identyfikowanie zapytań odstających, które zareagowały regresją przy wyższym poziomie zgodności, przy użyciu raportu zapytań z regresją w magazynie zapytań, przy pomocy narzędzia Asystent Dostrajania Zapytania podczas migracji lub innych danych telemetrycznych związanych z zapytaniami. Aby uzyskać więcej informacji na temat różnic między poziomami zgodności, zapoznaj się z Różnice między poziomami zgodności.
Po przetestowaniu wydajności nowego poziomu zgodności i wdrożeniu wskazówek magazynu zapytań w ten sposób można uaktualnić poziom zgodności całej bazy danych, zachowując jednocześnie kluczowe problematyczne zapytania na poprzednim poziomie zgodności bez żadnych zmian w kodzie.
Blokuj przyszłe wykonywanie problematycznych zapytań
Możesz użyć ABORT_QUERY_EXECUTION wskazówki dotyczącej zapytania, aby zablokować przyszłe wykonywanie znanych problematycznych zapytań, na przykład zapytania bezskuteiczne powodujące wysokie użycie zasobów i wpływające na krytyczne obciążenia aplikacji.
Note
Wskazówka dotycząca zapytania ABORT_QUERY_EXECUTION jest dostępna tylko w usługach Azure SQL Database, Azure SQL Managed InstanceAUTD i SQL Server 2025 (17.x).
Aby na przykład zablokować przyszłe wykonanie 39, wykonaj query_id w następujący sposób:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION (USE HINT (''ABORT_QUERY_EXECUTION''))';
Aby odblokować to samo zapytanie, wykonaj sys.sp_query_store_clear_hints:
EXECUTE sys.sp_query_store_clear_hints @query_id = 39;
Aby uzyskać więcej informacji, zobacz przykłady wskazówek Query Store.
Obowiązują następujące zastrzeżenia:
Po określeniu tej wskazówki dla zapytania próba wykonania zapytania kończy się niepowodzeniem z powodu błędu 8778, ważność 16, wykonanie zapytania zostało przerwane, ponieważ określono wskazówkę ABORT_QUERY_EXECUTION.
Aby odblokować zapytanie, możesz wyczyścić wskazówkę, przekazując wartość
query_iddo parametru@query_idw składowanej procedurze sys.sp_query_store_clear_hints.- Ta procedura składowana czyści wszystkie wskazówki dotyczące zapytania. Jeśli chcesz zachować istniejące wskazówki podczas odblokowywania zapytania, użyj sys.sp_query_store_set_hints, usuwając
ABORT_QUERY_EXECUTIONwskazówkę, ale zachowując inne wskazówki.
- Ta procedura składowana czyści wszystkie wskazówki dotyczące zapytania. Jeśli chcesz zachować istniejące wskazówki podczas odblokowywania zapytania, użyj sys.sp_query_store_set_hints, usuwając
Za pomocą widoków systemowych można znaleźć zapytania w magazynie zapytań, które są blokowane, jak w poniższym przykładowym zapytaniu:
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%';Aby uzyskać wartość
query_id, co najmniej jedno wykonanie zapytania musi być zarejestrowane w Query Store. To wykonanie nie musi zakończyć się pomyślnie. Oznacza to, że przyszłe wykonanie zapytań, które wygasły lub zostały anulowane, może zostać zablokowane.Jeśli musisz zablokować lub odblokować wszystkie zapytania z określonym skrótem zapytania, rozważ użycie skryptu automatyzacji. Na przykład dbo.sp_query_store_modify_hints_by_query_hash to przykładowa procedura składowana, która wywołuje w pętli procedurę składowaną systemu
sys.sp_query_store_set_hintslubsys.sp_query_store_clear_hintsdla wszystkich wartościquery_idpasujących do skrótu zapytania.Jeśli zapytanie jest już wykonywane podczas blokowania go, jego wykonanie będzie kontynuowane. Aby przerwać zapytanie, możesz użyć instrukcji KILL .
- Wykonywanie przerwanych zapytań nie jest rejestrowane w Magazynie Zapytań. Jeśli zapytanie nie znajduje się jeszcze w magazynie zapytań, musisz pozwolić na jego zakończenie lub przekroczenie limitu czasu, aby uzyskać
query_id, który możesz zablokować.
- Wykonywanie przerwanych zapytań nie jest rejestrowane w Magazynie Zapytań. Jeśli zapytanie nie znajduje się jeszcze w magazynie zapytań, musisz pozwolić na jego zakończenie lub przekroczenie limitu czasu, aby uzyskać
Gdy zapytanie jest blokowane przez
ABORT_QUERY_EXECUTIONwskazówkę, kolumnyexecution_typeiexecution_type_descw widoku sys.query_store_runtime_stats są ustawione odpowiednio na 4 i Wyjątek.Podobnie jak w przypadku wszystkich podpowiedzi Query Store, musisz mieć
ALTERuprawnienie do bazy danych, aby ustawić i usunąćABORT_QUERY_EXECUTIONpodpowiedź.
Uwagi dotyczące wskazówek dla Magazynu Zapytań
Podczas wdrażania wskazówek Query Store należy wziąć pod uwagę następujące scenariusze.
Zmiany dystrybucji danych
Przewodniki planów, wymuszone plany poprzez Magazyn Zapytań i wskazówki Magazynu Zapytań zastępują podejmowanie decyzji optymalizatora. Podpowiedź Query Store może być obecnie korzystna, ale niekoniecznie w przyszłości. Jeśli na przykład wskazówka dotycząca magazynu zapytań pomaga w zapytaniu w poprzedniej dystrybucji danych, może to być sprzeczne z wydajnością, jeśli operacje DML na dużą skalę zmieniają dane. Nowa dystrybucja danych może spowodować, że optymalizator podejmie lepszą decyzję niż wskazówka. Ten scenariusz jest najczęstszą konsekwencją wymuszania zachowania planu.
Regularnie ponownie oceniaj swoją strategię podpowiedzi Query Store
Ponownie oceń swoją obecną strategię podpowiedzi w Query Store w następujących sytuacjach:
- Po wystąpieniu znanych zmian dużego rozkładu danych.
- Gdy zasoby dostępne dla bazy danych zmienią się. Na przykład, gdy zmienia się rozmiar obliczeniowy usługi Azure SQL Database, wystąpienia zarządzanego SQL lub maszyny wirtualnej SQL Server.
- Gdzie ustalanie planu stało się długotrwałe. Wskazówki dotyczące Query Store najlepiej nadają się do krótkoterminowych rozwiązań.
- Nieoczekiwane regresje wydajności.
Szeroki potencjał wpływu
Wskazówki dotyczące magazynu zapytań mają wpływ na wszystkie wykonania zapytania, niezależnie od zestawu parametrów, aplikacji źródłowej, użytkownika lub zestawu wyników. W przypadku niezamierzonej regresji wydajności wskazówki magazynu zapytań utworzone za pomocą sys.sp_query_store_set_hints można łatwo usunąć za pomocą sys.sp_query_store_clear_hints.
Przed zastosowaniem podpowiedzi magazynu zapytań w środowisku produkcyjnym należy uważnie przeprowadzić zmiany związane z testowaniem obciążeniowym dla systemów o znaczeniu krytycznym lub poufnym.
Wymuszona parametryzacja i wskazówka RECOMPILE nie są obsługiwane
RECOMPILE Zastosowanie wskazówki zapytania z wskazówkami Query Store nie jest obsługiwane, gdy opcja bazy danych PARAMETRYZACJA jest ustawiona na WYMUSZONE. Aby uzyskać więcej informacji, zobacz Wytyczne dotyczące stosowania wymuszonej parametryzacji.
RECOMPILE Wskazówka nie jest zgodna z wymuszoną parametryzacją ustawioną na poziomie bazy danych. Jeśli baza danych używa wymuszonej parametryzacji, a RECOMPILE wskazówka jest częścią ciągu wskazówek ustawionych w Query Store dla zapytania, aparat bazy danych ignoruje RECOMPILE wskazówkę i stosuje inne wskazówki, jeśli określono. Ponadto, począwszy od lipca 2022 r. w usłudze Azure SQL Database, zostanie wyświetlone ostrzeżenie (kod błędu 12461) z informacją, że RECOMPILE wskazówka została zignorowana.
Aby dowiedzieć się, które podpowiedzi dotyczące zapytań można zastosować, zobacz Obsługiwane podpowiedzi dotyczące zapytań.