Share via


SET SHOWPLAN_XML (Transact-SQL)

SQL Server で Transact-SQL ステートメントを実行せず、代わりにステートメントの実行方法に関する詳細情報を、整形式の XML ドキュメントで返します。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

SET SHOWPLAN_XML { ON | OFF }

説明

SET SHOWPLAN_XML は、解析時ではなく実行時に設定されます。

SET SHOWPLAN_XML が ON の場合、SQL Server では各ステートメントの実行プラン情報だけが返され、Transact-SQL ステートメントは実行されません。返される情報は、このオプションが ON に設定されてから OFF に設定されるまでに発行されたすべての Transact-SQL ステートメントに関する実行プラン情報です。たとえば、SET SHOWPLAN_XML が ON のとき、CREATE TABLE ステートメントを実行した後で、同じテーブルを参照する SELECT ステートメントを実行すると、SQL Server では指定したテーブルが存在しないというエラー メッセージが返されます。その後、このテーブルに対して行われる参照は失敗します。SET SHOWPLAN_XML が OFF の場合、SQL Server ではレポートを作成せずに、ステートメントを実行します。

SET SHOWPLAN_XML では、sqlcmd ユーティリティなどのアプリケーション用に、出力が nvarchar(max) 型で返されます。この XML 出力は、他のツールがクエリ プランの情報の表示や処理を行う場合に使用されます。

注意

動的管理ビュー sys.dm_exec_query_plan では、SET SHOWPLAN_XML と同じ情報が xml データ型で返されます。この情報は、sys.dm_exec_query_planquery_plan 列から返されます。詳細については、「sys.dm_exec_query_plan (Transact-SQL)」を参照してください。

SET SHOWPLAN_XML はストアド プロシージャ内では指定できません。このステートメントは、バッチ内にのみ指定できます。

SET SHOWPLAN_XML では、情報が XML ドキュメントのセットとして返されます。SET SHOWPLAN_XML を ON にした後で実行された各バッチの情報は、それぞれ 1 つの出力ドキュメントに反映されます。各ドキュメントには、バッチ内のステートメントのテキストと実行ステップの詳細が含まれ、推定コスト、行数、アクセスしたインデックス、実行された演算子の種類、結合順序、および実行プランに関するその他の情報が示されます。

SET SHOWPLAN_XML による XML 出力用の XML スキーマを含んだドキュメントは、セットアップ時に、Microsoft SQL Server がインストールされているコンピューター上のローカル ディレクトリへコピーされます。このドキュメントは、SQL Server のインストール ファイルと同じドライブ上にあります。場所は次のとおりです。

\Microsoft SQL Server\90\Tools\Binn\schemas\sqlserver\2004\07\showplan\showplanxml.xsd

プラン表示スキーマは、この Web サイトにもあります。

注意

SQL Server Management Studio で [実際の実行プランを含める] をクリックすると、この SET オプションによって XML プラン表示出力が生成されません。SET オプションを使用するには、[実際の実行プランを含める] をクリックして選択を解除してください。

権限

SET SHOWPLAN_XML を使用するには、SET SHOWPLAN_XML の実行ステートメントを実行するための適切な権限が与えられている必要があります。また、参照されるオブジェクトを含むすべてのデータベースに対して、SHOWPLAN 権限が必要です。

プラン表示を作成するには、SELECT、INSERT、UPDATE、DELETE、EXEC stored_procedure ステートメントと EXEC user_defined_function ステートメントに対して次の権限が必要です。

  • Transact-SQL ステートメントを実行するための適切な権限。

  • SHOWPLAN 権限。これは、Transact-SQL ステートメントで参照されるオブジェクト (テーブルやビューなど) を含むすべてのデータベースに対して必要です。

DDL、USE database_name、SET、DECLARE、動的 SQL など、その他すべてのステートメントでは、Transact-SQL ステートメントを実行するための適切な権限だけが必要です。

詳細については、「プラン表示のセキュリティ」および「SHOWPLAN 権限と Transact-SQL バッチ」を参照してください。

次の 2 つのステートメントは、SET SHOWPLAN_XML の設定を使用して、SQL Server でクエリ内のインデックスの使用状況を分析し最適化する方法を示しています。

最初のクエリでは、インデックス列の WHERE 句で = (等しい) 比較演算子を使用しています。2 番目のクエリでは、WHERE 句で LIKE 演算子を使用します。このように指定すると、SQL Server ではクラスター化インデックス スキャンが行われ、WHERE 句の条件を満たすデータが検索されます。EstimateRows 属性と EstimatedTotalSubtreeCost 属性の値は、インデックスが設定された最初のクエリの方が小さくなるので、インデックスが設定されていないクエリよりも速く処理が行われ、使用リソースが少なかったことがわかります。

USE AdventureWorks2008R2;
GO
SET SHOWPLAN_XML ON;
GO
-- First query.
SELECT BusinessEntityID 
FROM HumanResources.Employee
WHERE NationalIDNumber = '509647174';
GO
-- Second query.
SELECT BusinessEntityID, LoginID 
FROM HumanResources.Employee
WHERE JobTitle LIKE 'Production%';
GO
SET SHOWPLAN_XML OFF;