Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
план-аэроплан
Guest |
Нужно посмотреть все имеющиеся в кэше планы для процедуры. Вот для начала у меня есть запрос из хорошей статьи: select qs.*, a.attrlist from sys.dm_exec_query_stats qs cross apply sys.dm_exec_sql_text(qs.sql_handle) est cross apply (select epa.attribute + '=' + convert(nvarchar(127), epa.value) + ' ' from sys.dm_exec_plan_attributes(qs.plan_handle) epa where epa.is_cache_key = 1 order by epa.attribute for xml path('')) as a(attrlist) where est.objectid = object_id ('dbo.MyProc) and est.dbid = db_id('MyBase') Можно ли как-то посмотреть сами планы для полученного списка? |
9 июл 12, 10:11 [12837143] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Использовать sys.dm_exec_query_plan |
9 июл 12, 10:41 [12837260] Ответить | Цитировать Сообщить модератору |
план-аэроплан
Guest |
Glory, Ок, но такой вариант: select esp.* from sys.dm_exec_query_stats qs cross apply sys.dm_exec_sql_text(qs.sql_handle) est cross apply sys.dm_exec_query_plan (qs.plan_handle) esp cross apply (select epa.attribute + '=' + convert(nvarchar(127), epa.value) + ' ' from sys.dm_exec_plan_attributes(qs.plan_handle) epa where epa.is_cache_key = 1 order by epa.attribute for xml path('')) as a(attrlist) where est.objectid = object_id ('dbo.MyProc') and est.dbid = db_id('MyBase') вроде план не вводит, по крайней мере, в поле query_plan одни NULL. нужно включить какую-то опцию? |
9 июл 12, 10:51 [12837326] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
нет |
||
9 июл 12, 10:53 [12837341] Ответить | Цитировать Сообщить модератору |
план-аэроплан
Guest |
Glory, Ок, а в чем может быть проблема? Сейчас посмотрел - для других процедур план вывелся. Для этой - везде NULL. |
9 июл 12, 11:04 [12837424] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
В неправильном запросе. Начните с документированных примеров из хелпа B. Retrieve every query plan from the plan cache To retrieve a snapshot of all query plans residing in the plan cache, retrieve the plan handles of all query plans in the cache by querying the sys.dm_exec_cached_plans dynamic management view. The plan handles are stored in the plan_handle column of sys.dm_exec_cached_plans. Then use the CROSS APPLY operator to pass the plan handles to sys.dm_exec_query_plan as follows. The XML Showplan output for each plan currently in the plan cache is in the query_plan column of the table that is returned. USE master; GO SELECT * FROM sys.dm_exec_cached_plans cp CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle); GO |
||
9 июл 12, 11:08 [12837443] Ответить | Цитировать Сообщить модератору |
Slava_Nik Member Откуда: из России Сообщений: 891 |
план-аэроплан, значит план уже удалился из кеша, либо его там не было. попробуйте выполнить процедуру, и заново просмотреть кеш |
9 июл 12, 11:10 [12837454] Ответить | Цитировать Сообщить модератору |
план-аэроплан
Guest |
Glory, Чем тот запрос был неправильным? Запрос: select esp.query_plan from sys.dm_exec_cached_plans cp cross apply sys.dm_exec_query_plan(cp.plan_handle) esp where esp.objectid = object_id ('dbo.MyProc') and esp.dbid = db_id('MyBase')дает две записи со значением NULL в поле query_plan. Для другой процедуры план выводит. Т.е. ситуация в том, что планы есть и запрос выводит нужные строчки, но для некоторых процедур в поле query_plan - пустое значение. |
9 июл 12, 14:41 [12838954] Ответить | Цитировать Сообщить модератору |
план-аэроплан
Guest |
Slava_Nik, см. ответ Glory |
9 июл 12, 14:42 [12838963] Ответить | Цитировать Сообщить модератору |
план-аэроплан
Guest |
Стал искать особенности в процедуре, в которой были NULL в поле query_plan. Нашел и проверил на других процедурах, что если у нас в процедуре есть конструкция типа (упрощенно): create table #gg(gg int primary key) if 1=2 insert #gg(gg) values (3)то запросы указанные выше (что один, что другой) даст записи, в которых будет NULL в поле query_plan. Есть какое-то этому обьяснение? |
9 июл 12, 16:41 [12839949] Ответить | Цитировать Сообщить модератору |
план-аэроплан
Guest |
а условие скорее не 1=2, а dbo.MyFunction(@CalculatedPar) = 1 |
||
9 июл 12, 16:45 [12839988] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |