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

Откуда:
Сообщений: 1368
Как получить актуальный план запросов из кеша по выполненным запросам?
из sys.dm_exec_query_plan я так понимаю это предварительный план, т.к там все операции с estimated данным.
25 фев 16, 12:42    [18861690]     Ответить | Цитировать Сообщить модератору
 Re: Получить актуальный план запросов  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8350
смотрю_тут,

а зачем их хранить? Они никакой ценности не представляют.
25 фев 16, 12:46    [18861726]     Ответить | Цитировать Сообщить модератору
 Re: Получить актуальный план запросов  [new]
смотрю_тут
Member

Откуда:
Сообщений: 1368
кроме как из студии, где можно отобразить актуальный план.
25 фев 16, 12:46    [18861730]     Ответить | Цитировать Сообщить модератору
 Re: Получить актуальный план запросов  [new]
Glory
Member

Откуда:
Сообщений: 104751
смотрю_тут
кроме как из студии, где можно отобразить актуальный план.

В профайлере
25 фев 16, 12:46    [18861736]     Ответить | Цитировать Сообщить модератору
 Re: Получить актуальный план запросов  [new]
смотрю_тут
Member

Откуда:
Сообщений: 1368
Владислав Колосов,
на счет хранить не знаю, но ценность вообще-то представляют.
забыл указать sql 2012 ыз3
25 фев 16, 12:47    [18861740]     Ответить | Цитировать Сообщить модератору
 Re: Получить актуальный план запросов  [new]
смотрю_тут
Member

Откуда:
Сообщений: 1368
в профайлере так же на момент выполнения, а из истории.
последний запрос с планом , который к примеру час назад выполнился, и после не выполнялся, получить его реальный план не получится,так понимаю?

Это вроде фишка 2016 будет, когда будет хранится история планов выполнения.
25 фев 16, 12:50    [18861760]     Ответить | Цитировать Сообщить модератору
 Re: Получить актуальный план запросов  [new]
Glory
Member

Откуда:
Сообщений: 104751
смотрю_тут
в профайлере так же на момент выполнения, а из истории.

И кто мешает сохранять трассу для истории ?
25 фев 16, 12:54    [18861791]     Ответить | Цитировать Сообщить модератору
 Re: Получить актуальный план запросов  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
смотрю_тут
в профайлере так же на момент выполнения, а из истории.
последний запрос с планом , который к примеру час назад выполнился, и после не выполнялся, получить его реальный план не получится,так понимаю?

Это вроде фишка 2016 будет, когда будет хранится история планов выполнения.


Добрый день.

Взять актуальный план из какой-либо «системной истории» не получится, т.к. он не сохраняется в «истории». Только трассировка, расширенные события или set statistics xml. Это связано с тем, что представляет из себя актуальный план и как собирается.

В 2016 механизм Query Store тоже не хранит актуальные планы.

+ п.с.

Есть забавный эффект с option(recompile),

use opt;
go
dbcc freeproccache;
go
create proc p1 @b int
as
select * from t1 join t2 on t1.a = t2.b where t1.b = @b option(recompile);
go
exec p1 1
go
select * from 
	sys.dm_exec_cached_plans cp 
	cross apply sys.dm_exec_query_plan(cp.plan_handle) qp
	cross apply sys.dm_exec_sql_text(cp.plan_handle) t
where 
	qp.objectid = object_id('p1')
;
go
exec p1 null
go
select * from 
	sys.dm_exec_cached_plans cp 
	cross apply sys.dm_exec_query_plan(cp.plan_handle) qp
	cross apply sys.dm_exec_sql_text(cp.plan_handle) t
where 
	qp.objectid = object_id('p1')
;
go


exec p1 1
Картинка с другого сайта.

exec p1 null
Картинка с другого сайта.

План процедуры представляет собой некий костяк (skeleton), с которым связаны планы входящих в процедуру statement-ов. И несмотря на то, что statement внутри процедуры каждый раз рекомпилируется, тем не менее в кэше сохраняется последний рекомпилированный во время выполнения план (разумеется, это не actual plan, а план рекомпилированный во время выполнения), хотя в свойствах плана и указано Retrieved From cache = false, планы получены из кэша (если только нас не обманывают и dm_exec_cached_plans и dm_exec_query_plan действительно лезут в кэш).
25 фев 16, 15:26    [18862877]     Ответить | Цитировать Сообщить модератору
 Re: Получить актуальный план запросов  [new]
Bcex
Member [заблокирован]

Откуда: UK
Сообщений: 397
смотрю_тут
Как получить актуальный план запросов из кеша по выполненным запросам?
из sys.dm_exec_query_plan я так понимаю это предварительный план, т.к там все операции с estimated данным.


Экстенденд Эвентс же.
25 фев 16, 15:26    [18862887]     Ответить | Цитировать Сообщить модератору
 Re: Получить актуальный план запросов  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8350
смотрю_тут
Владислав Колосов,
на счет хранить не знаю, но ценность вообще-то представляют.
забыл указать sql 2012 ыз3

Для сервера не представляют. Не всегда же при анализе проблемы надо думать о себе, любимом :)
25 фев 16, 15:38    [18862985]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить