sys.dm_exec_query_plan (TRANSACT-SQL)sys.dm_exec_query_plan (Transact-SQL)

適用対象: ○SQL Server (2008 以降) ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

プラン ハンドルで指定されたバッチのプラン表示を XML 形式で返します。Returns the Showplan in XML format for the batch specified by the plan handle. プランでは、プラン ハンドルでできますキャッシュまたは現在実行されているを指定します。The plan specified by the plan handle can either be cached or currently executing.

プラン表示の XML スキーマは公開されてで使用可能なこの Microsoft Web サイトします。The XML schema for the Showplan is published and available at this Microsoft Web site. また、SQL ServerSQL Server がインストールされているディレクトリからも入手できます。It is also available in the directory where SQL ServerSQL Server is installed.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

sys.dm_exec_query_plan(plan_handle)  

引数Arguments

plan_handleplan_handle
実行されるバッチのクエリ実行プランを一意に識別するトークンと、そのプランがプラン キャッシュ内に存在または現在実行しています。Is a token that uniquely identifies a query execution plan for a batch that has executed and its plan resides in the plan cache, or is currently executing. plan_handlevarbinary (64) します。plan_handle is varbinary(64).

Plan_handle次の動的管理オブジェクトから取得できます。The plan_handle can be obtained from the following dynamic management objects:

返されるテーブルTable Returned

列名Column name データ型Data type 説明Description
dbiddbid smallintsmallint このプランに対応する Transact-SQLTransact-SQL ステートメントがコンパイルされたときに有効であったコンテキスト データベースの ID。ID of the context database that was in effect when the Transact-SQLTransact-SQL statement corresponding to this plan was compiled. アドホックおよび準備された SQL ステートメントのステートメントがコンパイルされたデータベースの ID。For ad hoc and prepared SQL statements, the ID of the database where the statements were compiled.

列が null 値を許容します。Column is nullable.
objectidobjectid intint このクエリ プランのオブジェクト (たとえば、ストアド プロシージャまたはユーザー定義関数) の ID。ID of the object (for example, stored procedure or user-defined function) for this query plan. アドホックおよび準備されたバッチでは、この列はnullします。For ad hoc and prepared batches, this column is null.

列が null 値を許容します。Column is nullable.
numbernumber smallintsmallint 番号付きストアド プロシージャの整数。Numbered stored procedure integer. ための手順のグループなど、注文アプリケーションが付けられてorderproc; 1orderproc; 2など。For example, a group of procedures for the orders application may be named orderproc;1, orderproc;2, and so on. アドホックおよび準備されたバッチでは、この列はnullします。For ad hoc and prepared batches, this column is null.

列が null 値を許容します。Column is nullable.
encryptedencrypted bitbit 対応するストアド プロシージャを暗号化するかどうかを示します。Indicates whether the corresponding stored procedure is encrypted.

0 = 暗号化されていません。0 = not encrypted

1 = 暗号化1 = encrypted

列値が許容されません。Column is not nullable.
query_planquery_plan xmlxml 指定されているクエリの実行プランのコンパイル時のプラン表示形式を格納してplan_handleします。Contains the compile-time Showplan representation of the query execution plan that is specified with plan_handle. プラン表示は XML 形式です。The Showplan is in XML format. 含まれているなどのアドホック バッチごとに 1 つのプランが生成されたTransact-SQLTransact-SQLステートメント、ストアド プロシージャの呼び出し、およびユーザー定義関数の呼び出し。One plan is generated for each batch that contains, for example ad hoc Transact-SQLTransact-SQL statements, stored procedure calls, and user-defined function calls.

列が null 値を許容します。Column is nullable.

コメントRemarks

次の条件では、プラン表示出力が返されない、 query_planの返されたテーブルの列sys.dm_exec_query_plan:Under the following conditions, no Showplan output is returned in the query_plan column of the returned table for sys.dm_exec_query_plan:

  • 場合は、クエリ プランを使用して指定plan_handleがプラン キャッシュから削除された、 query_plan返されるテーブルの列が null です。If the query plan that is specified by using plan_handle has been evicted from the plan cache, the query_plan column of the returned table is null. プラン ハンドルがキャプチャされた、と共に使用された場合との間の遅延時間がある場合にこの状態が発生するなど、 sys.dm_exec_query_planします。For example, this condition may occur if there is a time delay between when the plan handle was captured and when it was used with sys.dm_exec_query_plan.

  • いくつかTransact-SQLTransact-SQL一括操作ステートメントや 8 KB のサイズより大きい文字列リテラルを含むステートメントなど、ステートメントはキャッシュされません。Some Transact-SQLTransact-SQL statements are not cached, such as bulk operation statements or statements containing string literals larger than 8 KB in size. 使用してこのようなステートメントの XML プラン表示を取得することはできませんsys.dm_exec_query_planバッチは、キャッシュが存在しないために現在実行している場合を除き、します。XML Showplans for such statements cannot be retrieved by using sys.dm_exec_query_plan unless the batch is currently executing because they do not exist in the cache.

  • 場合、Transact-SQLTransact-SQLバッチまたはストアド プロシージャは、ユーザー定義関数への呼び出しやたとえば EXEC を使用して、動的 SQL への呼び出しが含まれます (文字列)、XML プラン表示の表に、ユーザー定義関数が含まれていないコンパイルによって返されるsys.dm_exec_query_planバッチやストアド プロシージャ。If a Transact-SQLTransact-SQL batch or stored procedure contains a call to a user-defined function or a call to dynamic SQL, for example using EXEC (string), the compiled XML Showplan for the user-defined function is not included in the table returned by sys.dm_exec_query_plan for the batch or stored procedure. 代わりに、別の呼び出しを行う必要がありますsys.dm_exec_query_planユーザー定義関数に対応するプラン ハンドル。Instead, you must make a separate call to sys.dm_exec_query_plan for the plan handle that corresponds to the user-defined function.

アドホック クエリは、簡易または強制パラメーター化を使用する場合、 query_planステートメント テキストのみと実際のクエリ プランではない列が含まれます。When an ad hoc query uses simple or forced parameterization, the query_plan column will contain only the statement text and not the actual query plan. クエリ プランを返すを呼び出すsys.dm_exec_query_plan準備されたパラメーター化されたクエリのプラン ハンドル。To return the query plan, call sys.dm_exec_query_plan for the plan handle of the prepared parameterized query. 参照することによって、クエリがパラメーター化されたかどうかを指定できます、 sqlの列、 sys.syscacheobjectsビューまたはの text 列、 sys.dm_exec_sql_text動的管理ビュー。You can determine whether the query was parameterized by referencing the sql column of the sys.syscacheobjects view or the text column of the sys.dm_exec_sql_text dynamic management view.

許可される入れ子のレベルの数の制限により、 xmlデータ型、 sys.dm_exec_query_planを満たす、または入れ子になった要素のレベルが 128 を超えるクエリ プランを返すことはできません。Due to a limitation in the number of nested levels allowed in the xml data type, sys.dm_exec_query_plan cannot return query plans that meet or exceed 128 levels of nested elements. SQL ServerSQL Server の以前のバージョンでは、この条件が原因でクエリ プランが返されず、エラー 6335 が生成されます。In earlier versions of SQL ServerSQL Server, this condition prevented the query plan from returning and generates error 6335. SQL Server 2005SQL Server 2005 Service Pack 2 および以降のバージョンで、 query_plan列は NULL を返します。In SQL Server 2005SQL Server 2005 Service Pack 2 and later versions, the query_plan column returns NULL. 使用することができます、 sys.dm_exec_text_query_plan (TRANSACT-SQL) 動的管理関数をテキスト形式でクエリ プランの出力を返します。You can use the sys.dm_exec_text_query_plan (Transact-SQL) dynamic management function to return the output of the query plan in text format.

アクセス許可Permissions

実行するsys.dm_exec_query_plan、ユーザーのメンバーである必要があります、 sysadminまたは固定サーバー ロール、VIEW SERVER STATEサーバーに対する権限。To execute sys.dm_exec_query_plan, a user must be a member of the sysadmin fixed server role or have the VIEW SERVER STATE permission on the server.

使用例Examples

次の例を使用する方法を示して、 sys.dm_exec_query_plan動的管理ビュー。The following examples show how to use the sys.dm_exec_query_plan dynamic management view.

XML プラン表示を表示するクエリを実行、次のクエリ エディターで[SQL Server Management Studio]SQL Server Management Studio、 をクリックし、 ShowPlanXMLで、 query_planによって返されるテーブルの列sys.dm_exec_query_planします。To view the XML Showplans, execute the following queries in the Query Editor of [SQL Server Management Studio]SQL Server Management Studio, then click ShowPlanXML in the query_plan column of the table returned by sys.dm_exec_query_plan. XML プラン表示が表示されます、Management StudioManagement Studio概要ペイン。The XML Showplan displays in the Management StudioManagement Studio summary pane. XML プラン表示をファイルに保存するを右クリックしてShowPlanXMLで、 query_plan列で、をクリックして結果に名前を付けての形式でファイルの名前< file_name> .sqlplan。 たとえば、MyXMLShowplan.sqlplan します。To save the XML Showplan to a file, right-click ShowPlanXML in the query_plan column, click Save Results As, name the file in the format <file_name>.sqlplan; for example, MyXMLShowplan.sqlplan.

A.A. 実行速度の遅い TRANSACT-SQL クエリまたはバッチのキャッシュされたクエリ プランを取得します。Retrieve the cached query plan for a slow-running Transact-SQL query or batch

クエリのさまざまな種類のプランTransact-SQLTransact-SQLアドホック バッチ、ストアド プロシージャ、およびユーザー定義関数などのバッチがプラン キャッシュと呼ばれるメモリ領域にキャッシュされます。Query plans for various types of Transact-SQLTransact-SQL batches, such as ad hoc batches, stored procedures, and user-defined functions, are cached in an area of memory called the plan cache. 各キャッシュされたクエリ プランは、プラン ハンドルと呼ばれる一意の識別子によって識別されます。Each cached query plan is identified by a unique identifier called a plan handle. このプラン ハンドルを指定することができます、 sys.dm_exec_query_plan特定の実行プランを取得する動的管理ビューTransact-SQLTransact-SQLクエリまたはバッチです。You can specify this plan handle with the sys.dm_exec_query_plan dynamic management view to retrieve the execution plan for a particular Transact-SQLTransact-SQL query or batch.

Transact-SQLTransact-SQL クエリまたは SQL ServerSQL Server バッチが、特定の との接続において長時間実行されている場合は、このクエリやバッチの実行プランを取得して、遅延の原因を調べることができます。If a Transact-SQLTransact-SQL query or batch runs a long time on a particular connection to SQL ServerSQL Server, retrieve the execution plan for that query or batch to discover what is causing the delay. 次の例では、実行速度の遅いクエリまたはバッチの XML プラン表示を取得する方法を示します。The following example shows how to retrieve the XML Showplan for a slow-running query or batch.

注意

この例を実行するには、値を置き換えますsession_idplan_handleサーバーに特定の値を使用します。To run this example, replace the values for session_id and plan_handle with values specific to your server.

まず、sp_who ストアド プロシージャを使用して、クエリまたはバッチを実行しているプロセスのサーバー プロセス ID (SPID) を取得します。First, retrieve the server process ID (SPID) for the process that is executing the query or batch by using the sp_who stored procedure:

USE master;  
GO  
exec sp_who;  
GO  

によって返される結果セットsp_who、spid の値があることを示します54します。The result set that is returned by sp_who indicates that the SPID is 54. sys.dm_exec_requests 動的管理ビューで、この SPID を使用して次のクエリを実行すると、プラン ハンドルを取得できます。You can use the SPID with the sys.dm_exec_requests dynamic management view to retrieve the plan handle by using the following query:

USE master;  
GO  
SELECT * FROM sys.dm_exec_requests  
WHERE session_id = 54;  
GO  

によって返されるテーブルsys.dm_exec_requests実行速度の遅いクエリまたはバッチのプラン ハンドルがあることを示します0x06000100A27E7C1FA821B10600、として指定できますが、 plan_handle 引数sys.dm_exec_query_planを次のように XML 形式での実行プランを取得します。The table that is returned by sys.dm_exec_requests indicates that the plan handle for the slow-running query or batch is 0x06000100A27E7C1FA821B10600, which you can specify as the plan_handle argument with sys.dm_exec_query_plan to retrieve the execution plan in XML format as follows. 実行速度の遅いクエリまたはバッチの XML 形式での実行プランに含まれている、 query_planによって返されるテーブルの列sys.dm_exec_query_planします。The execution plan in XML format for the slow-running query or batch is contained in the query_plan column of the table returned by sys.dm_exec_query_plan.

USE master;  
GO  
SELECT * 
FROM sys.dm_exec_query_plan (0x06000100A27E7C1FA821B10600);  
GO  

B.B. すべてのクエリ プランをプラン キャッシュから取得します。Retrieve every query plan from the plan cache

プラン キャッシュにあるすべてのクエリ プランのスナップショットを取得するには、sys.dm_exec_cached_plans 動的管理ビューに対してクエリを実行し、キャッシュにあるすべてのクエリ プランのプラン ハンドルを取得します。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. プラン ハンドルは、plan_handlesys.dm_exec_cached_plans 列に格納されます。The plan handles are stored in the plan_handle column of sys.dm_exec_cached_plans. CROSS APPLY 演算子を使用し、プラン ハンドルを渡すsys.dm_exec_query_plan次のようにします。Then use the CROSS APPLY operator to pass the plan handles to sys.dm_exec_query_plan as follows. 現在プラン キャッシュにある各プランの XML プラン表示の出力は、返されるテーブルの query_plan 列に格納されます。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 AS cp 
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle);  
GO  

C.C. 対象のサーバーは、プラン キャッシュからクエリの統計情報を収集がすべてのクエリ プランを取得します。Retrieve every query plan for which the server has gathered query statistics from the plan cache

現在プラン キャッシュにあるクエリ プランのうち、サーバーで統計情報が収集されたすべてのクエリ プランのスナップショットを取得するには、sys.dm_exec_query_stats 動的管理ビューに対してクエリを実行し、キャッシュにあるこれらのプランのプラン ハンドルを取得します。To retrieve a snapshot of all query plans for which the server has gathered statistics that currently reside in the plan cache, retrieve the plan handles of these plans in the cache by querying the sys.dm_exec_query_stats dynamic management view. プラン ハンドルは、plan_handlesys.dm_exec_query_stats 列に格納されます。The plan handles are stored in the plan_handle column of sys.dm_exec_query_stats. CROSS APPLY 演算子を使用し、プラン ハンドルを渡すsys.dm_exec_query_plan次のようにします。Then use the CROSS APPLY operator to pass the plan handles to sys.dm_exec_query_plan as follows. XML プラン表示の出力をサーバーが、現在プラン キャッシュ内の統計情報を収集する各プランは、query_plan返されるテーブルの列。The XML Showplan output for each plan for which the server has gathered statistics 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_query_stats AS qs 
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle);  
GO  

D.D. 平均 CPU 時間に基づく上位 5 つのクエリに関する情報を取得するRetrieve information about the top five queries by average CPU time

次の例では、プランと、上位 5 つのクエリの平均 CPU 時間を返します。The following example returns the plans and average CPU time for the top five queries.

SELECT TOP 5 total_worker_time/execution_count AS [Avg CPU Time],  
   plan_handle, query_plan   
FROM sys.dm_exec_query_stats AS qs  
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle)  
ORDER BY total_worker_time/execution_count DESC;  
GO  

参照See Also

動的管理ビューと動的管理関数 (Transact-SQL) Dynamic Management Views and Functions (Transact-SQL)
sys.dm_exec_cached_plans &#40です。TRANSACT-SQL と&#41 です。 sys.dm_exec_cached_plans (Transact-SQL)
sys.dm_exec_query_stats (TRANSACT-SQL) sys.dm_exec_query_stats (Transact-SQL)
sys.dm_exec_requests (Transact-SQL) sys.dm_exec_requests (Transact-SQL)
sp_who (Transact-SQL) sp_who (Transact-SQL)
プラン表示の論理操作と物理操作のリファレンス Showplan Logical and Physical Operators Reference
sys.dm_exec_text_query_plan (Transact-SQL)sys.dm_exec_text_query_plan (Transact-SQL)