Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Актуальный план запроса  [new]
perf_digger
Member

Откуда:
Сообщений: 6
Здравствуйте!
Хочу посмотреть план тяжелого запроса.
Запросы генерирует стороннее приложение, доступа к коду нет
Получаю его статистики выполнения и план так:
SELECT p.query_plan
 ,qs.total_elapsed_time / 1000000 as [Elapsed]
 ,qs.execution_count as [Exec Cnt]
 ,qs.total_logical_reads as [Total Reads]
 ,qs.total_rows as [Total Rows]
 ,qs.total_rows/qs.execution_count as cnt_per_exec,
    SUBSTRING(t.text,qs.statement_start_offset/2 +1,
                 (CASE WHEN qs.statement_end_offset = -1   
                       THEN LEN(CONVERT(nvarchar(max), t.text)) * 2   
                       ELSE qs.statement_end_offset end -  
                            qs.statement_start_offset  
                 )/2  
             ) AS query_text
  FROM sys.dm_exec_query_stats AS qs
  CROSS APPLY sys.dm_exec_sql_text( plan_handle) AS t
  CROSS APPLY sys.dm_exec_query_plan( plan_handle) AS p
 where qs.sql_handle = 0x0200......

Кликаю на полученный план и вижу в tooltips на операциях плана только "Estimated показатели".
А хотелось бы видеть также и реальные от какого-нибудь выполнения.
Это можно сделать с помощью DMO ?
Или только с Profiler/Extended Events ?
(Про CTRL-M в SSMS в курсе, этот вариант не подходит)
1 сен 16, 15:06    [19617752]     Ответить | Цитировать Сообщить модератору
 Re: Актуальный план запроса  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1837
perf_digger,

на сколько мне помнится действительный план выполнения сохраняется в кэше планов если его стоимость достаточно высока и план используется многократно.

Правда могу ошибаться, по-моему когда то видел эту инфу на sqlservergeeks
1 сен 16, 15:43    [19617933]     Ответить | Цитировать Сообщить модератору
 Re: Актуальный план запроса  [new]
o-o
Guest
felix_ff,

а зачем бы актуальный план вообще сохранять
(не в смысле девелоперов, им много чего хотелось бы)
а именно серверу какой от этого прок?
1 сен 16, 16:08    [19618069]     Ответить | Цитировать Сообщить модератору
 Re: Актуальный план запроса  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
o-o
felix_ff,

а зачем бы актуальный план вообще сохранять
(не в смысле девелоперов, им много чего хотелось бы)
а именно серверу какой от этого прок?
Сравнить в следующий раз актуальный план с оценочным, найти несоответствие оценок, и затем построить новый, ещё более эффективный план :-)
1 сен 16, 17:41    [19618466]     Ответить | Цитировать Сообщить модератору
 Re: Актуальный план запроса  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
perf_digger,

Здравствуйте,

Actual план запроса нигде не сохраняется сервером.

Дело в том, что Actual план — это скомпилированный для выполнения план (почти всегда равный Estimated), который дополнен Runtime информацией. Runtime информацию собирают специальные итераторы-счетчики, которые встраиваются в исполняемый план сервера (невидимый нам), выполняемый в Execution Context. Он строится во время выполнения, и итераторы сбора Runtime добавляются, если включена опция set statistics xml/profile либо сбор profiler, extended events или иной слушатель такой информации.

Если выполнение началось раньше (Execution Context создался раньше), чем включен режим сбора, то итераторов сбора попросту нет в выполняемом плане и их туда не добавишь.

Есть DMV sys.dm_exec_query_profiles, но и она требует, чтобы был включен какой-либо режим сбора Runtime информации. В 2016 появился также механизм Query Store. Если он у вас включен, собирается много всякой Runtime статистики по запросу и сохраняется план, но статистика не по операторам и план не actual.

Так что вооружайтесь профайлером или xEvent-ами и мониторьте.
2 сен 16, 00:57    [19619690]     Ответить | Цитировать Сообщить модератору
 Re: Актуальный план запроса  [new]
perf_digger
Member

Откуда:
Сообщений: 6
Понятно.
Спасибо!
2 сен 16, 03:49    [19619766]     Ответить | Цитировать Сообщить модератору
 Re: Актуальный план запроса  [new]
Pavel1211
Member

Откуда: Екатеринбург
Сообщений: 205
SomewhereSomehow
(почти всегда равный Estimated)

а в Actual и Estimated могут быть разные операторы для одного и того же плана?
2 сен 16, 06:58    [19619821]     Ответить | Цитировать Сообщить модератору
 Re: Актуальный план запроса  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Pavel1211,

Добрый день, если речь про Estimted то да, может в некоторых случаях:
set showplan_xml on;
go
declare @a int = 1;
select * from master..spt_values where @a = 2 option(recompile);
go
set showplan_xml off;
go
set statistics xml on;
go
declare @a int = 1;
select * from master..spt_values where @a = 2 option(recompile);
go
set statistics xml off;
go


К сообщению приложен файл. Размер - 22Kb
2 сен 16, 11:17    [19620404]     Ответить | Цитировать Сообщить модератору
 Re: Актуальный план запроса  [new]
Pavel1211
Member

Откуда: Екатеринбург
Сообщений: 205
SomewhereSomehow,

Да, это и имел ввиду. Спасибо!
2 сен 16, 11:52    [19620615]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить