Files
2026-05-18 06:40:19 +00:00

2.9 KiB

Optymalizator zapytań

  1. informacja o optymalzatorze select * from sys.dm_exec_query_optimizer_info

!! Pamiętajmy o czyszczeniu cache przed uruchomieniem zapytań żeby mieć pewność że zapytanie zostanie zoptymalizowane.

  1. Zebranie informacji o optymalizacji

-- optymalizacja tych zapytań teraz, -- aby nie zaburzały zebranych danych GO SELECT * INTO after_query_optimizer_info FROM sys.dm_exec_query_optimizer_info GO SELECT * INTO before_query_optimizer_info FROM sys.dm_exec_query_optimizer_info GO DROP TABLE before_query_optimizer_info DROP TABLE after_query_optimizer_info GO -- rozpoczęcie właściwego wykonywania GO SELECT * INTO before_query_optimizer_info FROM sys.dm_exec_query_optimizer_info GO -- tutaj wstaw swoje zapytanie SELECT * FROM Person.Address -- zachowaj poniższe, aby wymusić nową optymalizację OPTION (RECOMPILE) GO SELECT * INTO after_query_optimizer_info FROM sys.dm_exec_query_optimizer_info GO SELECT a.counter, (a.occurrence - b.occurrence) AS occurrence, (a.occurrence * a.value - b.occurrence * b.value) AS value FROM before_query_optimizer_info b JOIN after_query_optimizer_info a ON b.counter = a.counter WHERE b.occurrence <> a.occurrence DROP TABLE before_query_optimizer_info DROP TABLE after_query_optimizer_info

  1. Liczba transformacji zapytania

-- optymalizacja tych zapytań teraz, -- aby nie zaburzały zebranych danych GO SELECT * INTO before_query_transformation_stats FROM sys.dm_exec_query_transformation_stats GO SELECT * INTO after_query_transformation_stats FROM sys.dm_exec_query_transformation_stats GO DROP TABLE after_query_transformation_stats DROP TABLE before_query_transformation_stats -- rozpoczęcie właściwego wykonywania GO SELECT * INTO before_query_transformation_stats FROM sys.dm_exec_query_transformation_stats GO -- tutaj wstaw swoje zapytanie SELECT * FROM Sales.SalesOrderDetail WHERE SalesOrderID = 43659 -- zachowaj poniższe, aby wymusić nową optymalizację OPTION (RECOMPILE) GO SELECT * INTO after_query_transformation_stats FROM sys.dm_exec_query_transformation_stats GO SELECT a.name, (a.promised - b.promised) as promised FROM before_query_transformation_stats b JOIN after_query_transformation_stats a ON b.name = a.name WHERE b.succeeded <> a.succeeded DROP TABLE before_query_transformation_stats DROP TABLE after_query_transformation_stats

  1. Statystyki
  • Możesz wykorzystać nieudokumentowane flagi 9292 i 9204 do wyświetlenia informacji o statystykach załadowanych podczas procesu optymalizacji. Uruchom zapytanie:

OPTION (RECOMPILE, QUERYTRACEON 9292, QUERYTRACEON 9204)

  • Flagi 9292 można użyć do wyświetlenia obiektów statystyk uważanych za interesujące. Uruchom poniższe zapytanie:

OPTION (RECOMPILE, QUERYTRACEON 9292)

  • Flagi 9204 można użyć do wyświetlenia obiektów statystyk, które zostały wykorzystane podczas szacowania kardynalności

OPTION (RECOMPILE, QUERYTRACEON 9204)