Uwaga
Dostęp do tej strony wymaga autoryzacji. Może 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)
Azure SQL Database
Azure SQL Managed Instance
SQL Database w 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 użytecznych informacji i dostrajania wydajności przy użyciu Query Store, zobacz Dostrajanie wydajności przy użyciu Query Store.
- Aby uzyskać ogólne najlepsze rozwiązania dotyczące magazynu zapytań, zobacz Najlepsze rozwiązania dotyczące 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.
Ostrożność
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 na przykład użyć wskazówek magazynu zapytań, aby korzystać z funkcji 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 odczuwasz potrzebę stosowania wskazówek Query Store do zapytania, rozważ całkowite przepisanie 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 Query Store nie wymaga, aby zapytania były dokładnie dopasowane, by 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 magazynu zapytań 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 testowania, 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:
EXEC 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 wskazówki Query Store mogą pomóc, jest wtedy, kiedy 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 wykazały regresję przy wyższym poziomie zgodności, przy użyciu raportu regresji zapytań w Sklepie Zapytań, narzędzia Query Tuning Advisor podczas migracji, lub innej telemetrii aplikacji na poziomie zapytania. 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 bez znaczenia powodujące wysokie użycie zasobów i wpływające na krytyczne obciążenia aplikacji.
Uwaga
Obecnie wskazówka zapytania ABORT_QUERY_EXECUTION (wersja zapoznawcza) jest dostępna tylko w usłudze Azure SQL Database.
Aby na przykład zablokować przyszłe wykonanie query_id
wartości 39, wykonaj następującą instrukcję:
EXEC sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION (USE HINT (''ABORT_QUERY_EXECUTION''))';
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_id
do procedury składowanej sys.sp_query_store_clear_hints. - Możesz użyć następującego przykładowego zapytania, aby znaleźć wszystkie zapytania w magazynie zapytań, które są blokowane za pomocą widoków systemowych, począwszy od widoku systemu sys.query_store_query_hints (Transact-SQL):
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 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 zezwolić na ukończenie lub przekroczenie limitu czasu zapytania w celu
query_id
zablokowania zapytania.
- Wykonywanie przerwanych zapytań nie jest rejestrowane w Magazynie Zapytań. Jeśli zapytanie nie znajduje się jeszcze w magazynie zapytań, musisz zezwolić na ukończenie lub przekroczenie limitu czasu zapytania w celu
- Gdy zapytanie jest blokowane przez
ABORT_QUERY_EXECUTION
wskazówkę, kolumnyexecution_type
iexecution_type_desc
w widoku sys.query_store_runtime_stats są ustawione odpowiednio na 4 i Wyjątek. - Podobnie jak w przypadku wszystkich podpowiedzi Query Store, musisz mieć
ALTER
uprawnienie do bazy danych, aby ustawić i usunąćABORT_QUERY_EXECUTION
podpowiedź.
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. Wskazówka dotycząca Query Store może być teraz korzystna, ale w przyszłości już nie. Na przykład, jeśli wskazówka dotycząca Query Store pomaga w zapytaniu przy poprzedniej dystrybucji danych, może być niekorzystna, jeśli operacje DML na dużą skalę zmienią 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 strategię podpowiedzi Query Store.
Ponownie oceń istniejącą strategię podpowiedzi Query Store w następujących przypadkach:
- 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
Zastosowanie wskazówki zapytania z RECOMPILE
wskazówkami magazynu zapytań 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.
Wskazówka RECOMPILE
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 magazynie zapytań 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ń.