Files
DBAdmin/inbox/DataBase/SQLServer/optymalizacja.md
T
2026-05-18 06:40:19 +00:00

110 lines
2.9 KiB
Markdown

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.
2. 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
3. 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
4. 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)