2.9 KiB
Optymalizator zapytań
- 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.
- 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
- 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
- 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)