web-dev-qa-db-fra.com

Comment afficher le plan d'exécution d'une procédure stockée?

Je peux consulter le plan d'exécution estimé (Management Studio 9.0) pour une requête sans problème, mais en ce qui concerne les procédures stockées, je ne vois pas comment le faire facilement sans copier le code de l'écran ALTER et le coller dans un fenêtre de requête, sinon le plan pour ALTER sera affiché, pas la procédure. Même après cela, toutes les entrées manquent et je devrais les déclarer comme telles.

Y a-t-il un moyen plus simple de faire cela sur les procédures stockées?

Edit: Je viens de penser à quelque chose qui pourrait fonctionner, mais je ne suis pas sûr.

Puis-je faire le plan d'exécution estimé sur

exec myStoredProc 234
36
Joe Phillips
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
39
Matt Rogish

Sélectionnez le nom de la procédure stockée (tapez-le simplement dans une fenêtre de requête), cliquez avec le bouton droit de la souris et choisissez le bouton "Afficher le plan d'exécution estimé" dans la barre d'outils de SQl Server Mgmt Studio .Remarque que vous n'avez pas. d'avoir le code de procédure stockée ouvert. Seul le nom de la procédure doit être sélectionné.

Le plan de la procédure stockée à partir de dans les procédures appelées sera également affiché sous forme graphique.

22
Pradeep

Lorsque vous exécutez une procédure stockée dans SQL Management Studio 2008, vous pouvez cliquer sur Requête -> Inclure le plan d'exécution réel dans le menu ... il apparaît également dans la barre d'outils.

Après avoir lu les commentaires, l’exécution semble être un problème et pour résoudre ce problème, je vous recommande d’envelopper l’exécution de la procédure stockée dans une transaction en l’annulant à la fin.

3
Jon

Utilisation

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

Voir http://msdn.Microsoft.com/en-us/library/aa259203.aspx Tant que vous n'utilisez pas les tableaux tmp, je pense que cela fonctionnera

3
CPU_BUSY

Je sais que la réponse a été envoyée il y a quelque temps, mais je trouve la requête ci-dessous utile

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'
2
BI Dude

Voici une capture d'écran. Il m'a fallu un moment pour trouver où chercher.

 enter image description here

1
VK_217

L'exécution de la procédure stockée dans Management Studio (ou l'analyseur de requête) avec l'option Afficher le plan d'exécution réel (à partir du menu de requête) activée vous montrera le plan de la procédure stockée après son exécution. Si vous ne pouvez pas l'exécuter, un plan d'exécution estimé est affiché (bien que, selon mon expérience, il soit souvent moins précis.)

0
u07ch

Vous pouvez également utiliser Profiler pour voir le plan d'exécution. Vous voudrez inclure l'option Performance: Afficher le profil de statistiques de planification et assurez-vous d'inclure des données binaires dans vos colonnes.

Vous pouvez ensuite exécuter n'importe quelle requête ou procédure et consulter le plan d'exécution.

Modifier

Si vous ne pouvez pas utiliser le profileur et que vous ne voulez pas ouvrir une autre fenêtre, je vous suggère d'inclure un bloc de commentaires au début de vos procédures stockées. Par exemple, imaginez ce qui suit:

/* 
     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

Ce que cela permet, c’est que vous pouvez uniquement souligner l’objectif d’exécution et activer le plan d’exécution de l’affichage. Et lance-le. 

0
JoshBerke