Udostępnij za pośrednictwem


Najlepsze praktyki dotyczące Query Store

Dotyczy: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL 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.

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.
  • Gdy zapytanie jest blokowane przez ABORT_QUERY_EXECUTION wskazówkę, kolumny execution_type i execution_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ń.