Подтвердить что ты не робот

Как отобразить план выполнения хранимой процедуры?

Я могу просмотреть Оценочный план выполнения (Management Studio 9.0) для запроса без проблем, но когда дело доходит до хранимых процедур, я не вижу простого способа сделать это без копирования кода с экрана ALTER и вставки он в окно запроса, иначе он покажет план ALTER, а не процедуру. Даже после этого никаких входных данных не хватает, и мне нужно будет ОТКАЗАТЬ их как таковые.

Есть ли более простой способ сделать это на хранимых процедурах?

Edit: Я просто подумал о чем-то, что может сработать, но я не уверен.

Могу ли я выполнить оценочный план выполнения на

exec myStoredProc 234
4b9b3361

Ответ 1

SET SHOWPLAN_ALL ON
GO

-- FMTONLY will not exec stored proc
SET FMTONLY ON
GO

exec yourproc
GO

SET FMTONLY OFF
GO

SET SHOWPLAN_ALL OFF
GO

Ответ 2

Выберите имя хранимой процедуры (просто введите его в окне запроса) и нажмите кнопку "Отобразить примерный план выполнения" на панели инструментов SQl Server Mgmt Studio. Примечание, что вам не нужно открывать код хранимой процедуры. Необходимо выбрать только имя процедуры.

План хранимой процедуры from with в вызываемых процедурах также будет отображаться в графической форме.

Ответ 3

При выполнении хранимой процедуры в SQL Management Studio 2008 вы можете щелкнуть Query → Include Actual Execution Plan из меню... ее также на панели инструментов

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

Ответ 4

Использование

SET SHOWPLAN_ALL ON
Go
exec myStoredProc 234
GO
SET SHOWPLAN_ALL OFF
GO

См. http://msdn.microsoft.com/en-us/library/aa259203.aspx Пока вы не используете таблицы tmp, я думаю, что это сработает

Ответ 5

Я знаю, что ответ был представлен некоторое время назад, но я нахожу запрос ниже полезного

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

SELECT  [ProcedureName]          =   OBJECT_NAME([ps].[object_id], [ps].[database_id]) 
       ,[ProcedureExecutes]      =   [ps].[execution_count] 
       ,[VersionOfPlan]          =   [qs].[plan_generation_num]
       ,[ExecutionsOfCurrentPlan]    =   [qs].[execution_count] 
       ,[Query Plan XML]         =   [qp].[query_plan]  

FROM       [sys].[dm_exec_procedure_stats] AS [ps]
       JOIN [sys].[dm_exec_query_stats] AS [qs] ON [ps].[plan_handle] = [qs].[plan_handle]
       CROSS APPLY [sys].[dm_exec_query_plan]([qs].[plan_handle]) AS [qp]
WHERE   [ps].[database_id] = DB_ID() 
       AND  OBJECT_NAME([ps].[object_id], [ps].[database_id])  = 'TEST'

Ответ 6

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

Ответ 7

Вы также можете использовать Profiler для просмотра плана выполнения. Вы хотите включить параметр "Профиль статистики: показать профиль статистики" и не забудьте включить двоичные данные в свои столбцы.

Затем вы можете выполнить любой запрос или процедуру и посмотреть план выполнения.

Edit

Если вы не можете использовать профилировщик и не хотите открывать другое окно, я предлагаю включить блок комментариев в начале сохраненных процессов. Например, представьте себе следующее:

/* 
     Description: This procedure does XYZ etc...
     DevelopedBy: Josh
     Created On:  4/27/09

     Execution: exec my_procName N'sampleparam', N'sampleparam'
*/

ALTER PROCEDURE  my_procName
   @p1 nvarchar(20),
   @p2 nvarchar(20)

AS

Что это позволяет, так это то, что вы можете выделить только цель выполнения и включить план выполнения шоу. И запустите его.