Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как вытащить план запроса из кэша?  [new]
гогол
Member [заблокирован]

Откуда:
Сообщений: 88
Приветствую,


Скажите, как вытащить план запроса выполнения процедуры из кэша?
21 сен 17, 13:31    [20812097]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
гогол,

гугел забанили?

SELECT text, cp.objtype, cp.size_in_bytes,OBJECT_NAME(st.objectid) as ObjectName ,ss.query_plan
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) st
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) ss
WHERE cp.cacheobjtype = N'Compiled Plan'
AND cp.objtype IN(N'Proc')
AND cp.usecounts = 1
ORDER BY ObjectName
21 сен 17, 13:42    [20812131]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
_human
Member

Откуда:
Сообщений: 560
гогол,

		select top 10 
		  d.name as db_name
		, s.name as schema_name
		, ps.object_id
		, object_name(ps.object_id)
		, qp.query_plan
	from [sys].[dm_exec_procedure_stats] as ps
		join sys.databases d on ps.database_id = d.database_id
		join sys.objects o on ps.object_id = o.object_id
		join sys.schemas s on o.schema_id = s.schema_id
		cross apply [sys].[dm_exec_query_plan](ps.plan_handle) as qp
21 сен 17, 13:43    [20812139]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
гогол
Member [заблокирован]

Откуда:
Сообщений: 88
TaPaK
гогол,

гугел забанили?

SELECT text, cp.objtype, cp.size_in_bytes,OBJECT_NAME(st.objectid) as ObjectName ,ss.query_plan
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) st
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) ss
WHERE cp.cacheobjtype = N'Compiled Plan'
AND cp.objtype IN(N'Proc')
AND cp.usecounts = 1
ORDER BY ObjectName


Спасибо.

Попробовал запрос, он ObjectName показывает NULL

Только 5 записей с именами, остальные с NULL.
21 сен 17, 14:14    [20812328]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
гогол
Member [заблокирован]

Откуда:
Сообщений: 88
TaPaK,

а нет, вроде все нормально!!!!


в контексте мастра просто запустил.
21 сен 17, 14:17    [20812345]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
гогол
Member [заблокирован]

Откуда:
Сообщений: 88
_human
гогол,

		select top 10 
		  d.name as db_name
		, s.name as schema_name
		, ps.object_id
		, object_name(ps.object_id)
		, qp.query_plan
	from [sys].[dm_exec_procedure_stats] as ps
		join sys.databases d on ps.database_id = d.database_id
		join sys.objects o on ps.object_id = o.object_id
		join sys.schemas s on o.schema_id = s.schema_id
		cross apply [sys].[dm_exec_query_plan](ps.plan_handle) as qp



Так тоже показывает, спасибо.

Разбираюсь
21 сен 17, 14:18    [20812352]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
гогол,
в принципе можно убрать
автор
AND cp.usecounts = 1
21 сен 17, 14:20    [20812360]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
гогол
Member [заблокирован]

Откуда:
Сообщений: 88
TaPaK
гогол,
в принципе можно убрать
автор
AND cp.usecounts = 1




Доброе утро.


Столкнулся с аномалией.



Для некоторых процедур не выводит план.

Хотя они выполняются примерно раз в минуту.

Вот, выбрал несколько интересующих процедур, для двух плана нет

К сообщению приложен файл. Размер - 17Kb
22 сен 17, 11:42    [20815129]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
komrad
Member

Откуда:
Сообщений: 5244
гогол

Вот, выбрал несколько интересующих процедур, для двух плана нет

как вариант: процедуры большие, планы гигантские, вымываются из процедурного кэша моментально
22 сен 17, 12:12    [20815295]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
гогол,

https://blogs.msdn.microsoft.com/psssql/2016/07/13/why-am-i-getting-null-values-for-query_plan-from-sys-dm_exec_query_plan/
22 сен 17, 12:26    [20815367]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
гогол
Member [заблокирован]

Откуда:
Сообщений: 88
komrad
гогол
Вот, выбрал несколько интересующих процедур, для двух плана нет

как вариант: процедуры большие, планы гигантские, вымываются из процедурного кэша моментально


Наоборот, процедуры эти буквально из 5 строчек состоят.


И что самое интересное, они циклично выполняются без остановки (приложение их запускае) и в какой-то момент что-то непонятное происходит и одна из этих процедур "зависает", на пару часов.
22 сен 17, 12:28    [20815375]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
гогол
Member [заблокирован]

Откуда:
Сообщений: 88
TaPaK
гогол,

https://blogs.msdn.microsoft.com/psssql/2016/07/13/why-am-i-getting-null-values-for-query_plan-from-sys-dm_exec_query_plan/


Спасибо, пытаюсь прочесть.
22 сен 17, 12:28    [20815380]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
komrad
Member

Откуда:
Сообщений: 5244
гогол
komrad
пропущено...

как вариант: процедуры большие, планы гигантские, вымываются из процедурного кэша моментально


Наоборот, процедуры эти буквально из 5 строчек состоят.

И что самое интересное, они циклично выполняются без остановки (приложение их запускае) и в какой-то момент что-то непонятное происходит и одна из этих процедур "зависает", на пару часов.

это для вас они 5 строк, а сиквел строит много-мегабайтные планы

ваши планы, даже если они маленькие, могут вымываться другими планами других процедур



+ что покажет этот запрос?
SELECT convert(numeric(10,2),cntr_value/128.) as [PlanCache_TotalMB]
from sys.dm_os_performance_counters
WHERE object_name=isnull('MSSQL$'+convert(varchar(50),serverproperty('instancename')),'SQLServer')+':Plan Cache' 
and counter_name = 'Cache Pages' 
and instance_name = '_Total'
22 сен 17, 12:43    [20815456]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
гогол
Member [заблокирован]

Откуда:
Сообщений: 88
komrad
гогол
пропущено...


Наоборот, процедуры эти буквально из 5 строчек состоят.

И что самое интересное, они циклично выполняются без остановки (приложение их запускае) и в какой-то момент что-то непонятное происходит и одна из этих процедур "зависает", на пару часов.

это для вас они 5 строк, а сиквел строит много-мегабайтные планы

ваши планы, даже если они маленькие, могут вымываться другими планами других процедур



+ что покажет этот запрос?
SELECT convert(numeric(10,2),cntr_value/128.) as [PlanCache_TotalMB]
from sys.dm_os_performance_counters
WHERE object_name=isnull('MSSQL$'+convert(varchar(50),serverproperty('instancename')),'SQLServer')+':Plan Cache' 
and counter_name = 'Cache Pages' 
and instance_name = '_Total'




8404.38
22 сен 17, 12:44    [20815466]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
komrad
Member

Откуда:
Сообщений: 5244
гогол

8404.38

ну неплохо...

в процедурах нет случаем фразы "with recompile" ?
22 сен 17, 12:46    [20815478]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
komrad,

давайте я ссылку буду по пунктам выкладывать?
22 сен 17, 12:47    [20815483]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
гогол
Member [заблокирован]

Откуда:
Сообщений: 88
komrad
гогол
8404.38

ну неплохо...

в процедурах нет случаем фразы "with recompile" ?


нет, такого нет.


Но в ней есть в одном из условий IF временные таблицы.
22 сен 17, 12:51    [20815499]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
гогол
Member [заблокирован]

Откуда:
Сообщений: 88
TaPaK,

пытаюсь прочесть статью со словарем...
22 сен 17, 12:51    [20815503]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
komrad
Member

Откуда:
Сообщений: 5244
TaPaK
komrad,

давайте я ссылку буду по пунктам выкладывать?

Вы лучше переведите её автору ;)

ну ок, перебивать не буду
22 сен 17, 12:57    [20815536]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
гогол
Member [заблокирован]

Откуда:
Сообщений: 88
В английском не силен, статью прочел с большим трудом.

Вроде понял из нее то что если процедура не полностью выполняется (из-за IF например) то план не попадает в dm_exec_cached_plans и части плана можно вытащить из sys.dm_exec_query_stats.


Правильно?
22 сен 17, 13:20    [20815633]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
План выполнения для запроса может быть не помещен в кеш планов, например если есть связка динамический SQL + OPTION(RECOMPILE) и тд. Ситуаций может быть много.
22 сен 17, 13:45    [20815733]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
гогол
В английском не силен, статью прочел с большим трудом.

Вроде понял из нее то что если процедура не полностью выполняется (из-за IF например) то план не попадает в dm_exec_cached_plans и части плана можно вытащить из sys.dm_exec_query_stats.
Правильно?

если один из стейтментов нельзя сохранять, то понятное дело вся процедура не даст план, куски можно получить.
вытеснение может быть, но тут опять же варинатн того что процедура перекомпилируется и вообщем-то не используется ибо если план используется активно, в общем-то хрен он вытеснится из кеша :)

автор
непонятное происходит и одна из этих процедур "зависает", на пару часов.

смотрите для начала ожидания пока висит
22 сен 17, 14:03    [20815829]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
Dmitry V. Liseev
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 5490
гогол
komrad
пропущено...

ну неплохо...

в процедурах нет случаем фразы "with recompile" ?


нет, такого нет.


Но в ней есть в одном из условий IF временные таблицы.
План вообще-то должен быть для каждого стейтмента свой. Если какие-то стейтменты не компилировались или используют временные таблицы, то для них нет плана. Потому и нет плана всей процедуры. Стейтменты, работающие с временными таблицами, каждый раз компилируются при запуске. Нет смысла хранить план в кэше.
22 сен 17, 14:08    [20815859]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
гогол
Member [заблокирован]

Откуда:
Сообщений: 88
TaPaK, Dmitry V. Liseev, AlanDenton, спасибо.

Вроде понял.


План выполнения процедуры не помещается в кэш планов когда:

1) Когда часть процедуры использует временные таблицы.

2) Когда часть процедуры не выполняется т.к. не соответсвут условию IF

3) В процедуре есть динамический SQL + OPTION(RECOMPILE).
22 сен 17, 14:44    [20816091]     Ответить | Цитировать Сообщить модератору
 Re: Как вытащить план запроса из кэша?  [new]
гогол
Member [заблокирован]

Откуда:
Сообщений: 88
TaPaK

автор
непонятное происходит и одна из этих процедур "зависает", на пару часов.

смотрите для начала ожидания пока висит


Не получается отловить.

В sysprocesses она отсутствует.

Наверное потому что внутри ее идет вызов других процедур.
22 сен 17, 14:51    [20816144]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить