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

Откуда: Москва
Сообщений: 72
Microsoft SQL Server 2012 - 11.0.5556.0 (X64)
Oct 31 2014 16:50:24
Copyright (c) Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
23 дек 14, 11:37    [17038719]     Ответить | Цитировать Сообщить модератору
 Re: не выдает некоторые планы запросов в Sql Server 2012  [new]
aleks2
Guest
Партизан?!
23 дек 14, 11:40    [17038740]     Ответить | Цитировать Сообщить модератору
 Re: не выдает некоторые планы запросов в Sql Server 2012  [new]
Monarchy
Member

Откуда: Москва
Сообщений: 72
Коллеги, кто-нибудь сталкивался с тем, что в Sql Serverr 2012 функции sys.dm_exec_text_query_plan и sys.dm_exec_query_plan не выдают многие планы запросов?
В Sql 2008 R2 с таким не сталкивался.

Вот например:

select cast (query_plan as xml) as All_Plan, r.plan_handle, * 
	from sys.dm_exec_requests r
	outer apply sys.dm_exec_sql_text(r.sql_handle) as s
	outer apply sys.dm_exec_text_query_plan (r.plan_handle,0,-1) p
	 where 1=1  
		--and r.sql_handle is not null 
		and session_id = 416


Пробовал отдельно запускать sys.dm_exec_text_query_plan и sys.dm_exec_query_plan для данного plan_handle, не выдает, хотя текущий Sql-запрос можно получить.

Такая версия Sql:
Microsoft SQL Server 2012 - 11.0.5556.0 (X64)
Oct 31 2014 16:50:24
Copyright (c) Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
23 дек 14, 11:41    [17038752]     Ответить | Цитировать Сообщить модератору
 Re: не выдает некоторые планы запросов в Sql Server 2012  [new]
Glory
Member

Откуда:
Сообщений: 104764
Monarchy
Коллеги, кто-нибудь сталкивался с тем, что в Sql Serverr 2012 функции sys.dm_exec_text_query_plan и sys.dm_exec_query_plan не выдают многие планы запросов?

Начните с хелпа
http://msdn.microsoft.com/en-us/library/bb326654.aspx

Under the following conditions, no Showplan output is returned in the plan column of the returned table for sys.dm_exec_text_query_plan:...
23 дек 14, 11:50    [17038808]     Ответить | Цитировать Сообщить модератору
 Re: не выдает некоторые планы запросов в Sql Server 2012  [new]
Crimean
Member

Откуда:
Сообщений: 13148
зачастую, профайлер - наше все...
23 дек 14, 11:55    [17038839]     Ответить | Цитировать Сообщить модератору
 Re: не выдает некоторые планы запросов в Sql Server 2012  [new]
Monarchy
Member

Откуда: Москва
Сообщений: 72
Glory
Monarchy
Коллеги, кто-нибудь сталкивался с тем, что в Sql Serverr 2012 функции sys.dm_exec_text_query_plan и sys.dm_exec_query_plan не выдают многие планы запросов?

Начните с хелпа
http://msdn.microsoft.com/en-us/library/bb326654.aspx

Under the following conditions, no Showplan output is returned in the plan column of the returned table for sys.dm_exec_text_query_plan:...



Спасибо! Может у кого есть готовые наработки (или статьи) - запросы Sql, по которым можно посмотреть эти планы и в таких случаях?
Даже распространеннная sp_WhoIsActive не выдает многие планы в Sql 2012, это очень не удобно, когда тормозит запрос, а ты не можешь взглянуть на его план.
23 дек 14, 15:16    [17040706]     Ответить | Цитировать Сообщить модератору
 Re: не выдает некоторые планы запросов в Sql Server 2012  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4369
Monarchy
Спасибо! Может у кого есть готовые наработки (или статьи) - запросы Sql, по которым можно посмотреть эти планы и в таких случаях?
Даже распространеннная sp_WhoIsActive не выдает многие планы в Sql 2012, это очень не удобно, когда тормозит запрос, а ты не можешь взглянуть на его план.


Держите профайлер включенным ... Пока сервак не упадёт.
23 дек 14, 15:31    [17040846]     Ответить | Цитировать Сообщить модератору
 Re: не выдает некоторые планы запросов в Sql Server 2012  [new]
Monarchy
Member

Откуда: Москва
Сообщений: 72
a_voronin
Monarchy
Спасибо! Может у кого есть готовые наработки (или статьи) - запросы Sql, по которым можно посмотреть эти планы и в таких случаях?
Даже распространеннная sp_WhoIsActive не выдает многие планы в Sql 2012, это очень не удобно, когда тормозит запрос, а ты не можешь взглянуть на его план.


Держите профайлер включенным ... Пока сервак не упадёт.


Чтоб сервак не падал от нагрузки от включенных профайлеров, нам и не дают на профайлер права на PRODе:)
Так что, думаю, это не вариант...

Мне кажется, должны быть хитрые Sql-запросы, которые все выдают, план то есть где-то на сервере.

Вот подобный запрос уже мне сильно помог:

SELECT UseCounts, Cacheobjtype, Objtype, TEXT, query_plan, *
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
CROSS APPLY sys.dm_exec_query_plan(plan_handle)
--where text like '%LOAD_INCR_BS%'  -- имя процедуры 
where text like '%select ID_SCENARIO,ID_DATE%' -- или часть запроса


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

Возможно, можно смотреть как-то удобнее... Если кто знает, пишите:)
24 дек 14, 11:56    [17044801]     Ответить | Цитировать Сообщить модератору
 Re: не выдает некоторые планы запросов в Sql Server 2012  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7383
Monarchy,
если план не кэширован, то его не увидите никак, кроме как профайлером.
24 дек 14, 12:05    [17044864]     Ответить | Цитировать Сообщить модератору
 Re: не выдает некоторые планы запросов в Sql Server 2012  [new]
Monarchy
Member

Откуда: Москва
Сообщений: 72
Владислав Колосов
Monarchy,
если план не кэширован, то его не увидите никак, кроме как профайлером.


Вроде так пока получается находить планы текущих запросов, которые в данный момент еще запущены, не из кэша:
	select cast (query_plan as xml) as All_Plan, text, r.plan_handle, * 
	from sys.dm_exec_requests r
	outer apply sys.dm_exec_sql_text(r.sql_handle) as s
	outer apply sys.dm_exec_text_query_plan (r.plan_handle,0,-1) p
	 where 1=1  
		--and r.sql_handle is not null 
		--and session_id = 114 -- поиск по id запроса
		and text like '%INSERT INTO SLICE_BS_1 WITH(TABLOCK)%' -- поиск по тексту запроса


Все проблемные запросы, которые уже закончились, но при прошлом запуске тормозили (возможно, были убиты), я обычно нахожу в кэше по запросу в своем прошлом посте:

	-- Поискать план в кэшах
	SELECT UseCounts, Cacheobjtype, Objtype, TEXT, query_plan, *
	FROM sys.dm_exec_cached_plans 
	CROSS APPLY sys.dm_exec_sql_text(plan_handle)
	CROSS APPLY sys.dm_exec_query_plan(plan_handle)
	where text like '%INSERT INTO SLICE_BS_1 WITH(TABLOCK)%' -- поиск по тексту запроса
25 дек 14, 22:20    [17054239]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: не выдает некоторые планы запросов в Sql Server 2012  [new]
Monarchy
Member

Откуда: Москва
Сообщений: 72
Вот тот искомый хитрый Sql-запрос, который выдает все планы (ни разу не было проблем с их отображением):

--- посмотреть план запроса 
DECLARE @id_session INT =338 -- написать номер сессии 

SELECT s.session_id, 
       d.NAME                                      AS DName, 
       Cast(Dateadd(second, s.total_elapsed_time / 1000, Getdate()) - Getdate() 
            AS TIME 
       )                                           AS elapsed_time, 
       ses.original_login_name, 
       s.granted_query_memory * 8. / 1024. / 1024. granted_query_memory_GB, 
       s.cpu_time, 
       s.logical_reads, 
       s.reads, 
       s.writes, 
       s.wait_type, 
       s.wait_time, 
       s.last_wait_type, 
       Substring(st.text, s.statement_start_offset / 2 + 1, 
       ( CASE 
           WHEN s.statement_end_offset = -1 THEN Len( 
           CONVERT(NVARCHAR(max), st.text)) * 
                                                 2 
           ELSE s.statement_end_offset 
         END - s.statement_start_offset ) / 2 + 1) AS sql_text, 
       percent_complete, 
       Try_convert(xml, pl.query_plan), 
       sp.*, 
       s.*, 
       st.*, 
       ses.* 
FROM   sys.dm_exec_requests s 
       INNER JOIN sys.databases d 
               ON d.database_id = s.database_id 
       INNER JOIN sys.dm_exec_sessions ses 
               ON s.session_id = ses.session_id 
       CROSS apply sys.Dm_exec_sql_text(s.sql_handle) st 
       OUTER apply sys.Dm_exec_query_plan(s.plan_handle) sp 
       OUTER apply sys.Dm_exec_text_query_plan(s.plan_handle, 
                   s.statement_start_offset, 
       s.statement_end_offset) pl 
WHERE  s.session_id = @id_session 
30 окт 19, 17:41    [22006334]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить