XML プラン表示

Microsoft SQL Server では、プラン表示の実行プラン出力をさまざまな方法によって XML 形式で生成できます。XML 形式のプラン表示出力は、コンピュータ間で移動でき、SQL Server がインストールされていなくてもすべてのコンピュータで表示できます。また、XML 形式のプラン表示出力は XPath、XQuery、XSLT、SAX、DOM などの XML テクノロジを使用して、プログラムで処理することもできます。XML プラン表示処理は、XPath と XQuery 用のクエリ評価エンジンが組み込まれている SQL Server でサポートされます。

XML プラン表示出力は、次の方法を使用して生成できます。

  • SQL Server Management Studio のクエリ エディタ ツール バーで、[推定実行プランの表示] または [実際の実行プランを含める] をクリックします。

  • Transact-SQL プラン表示用 SET ステートメント オプションの SHOWPLAN_XML と STATISTICS XML を使用します。

  • トレースに SQL Server Profiler イベント クラスの Showplan XMLShowplan XML for Query CompileShowplan XML Statistics Profile を選択します。

  • sys.dm_exec_query_plan 動的管理関数を使用します。

XML プラン表示は、sys.dm_exec_query_plan を使用する場合を除いて、上記のどの方法でも nvarchar(max) データ型で返されます。動的管理ビューを使用するときは、XML プラン表示は xml データ型で返されます。

プラン表示の XML スキーマは、次の場所から SQL Server インストール ファイルと一緒に入手できます。

C:\Program Files\Microsoft SQL Server\100\Tools\Binn\schemas\sqlserver\2004\07\showplan\showplanxml.xsd

注意

クエリ オプティマイザによるクエリの最適化が途中で終了すると、XML プラン表示出力の StmtSimple 要素に StatementOptmEarlyAbortReason 属性が返されます。この属性に表示できる値は、TimeOutGoodEnoughPlanFound、および MemoryLimitExceeded です。この属性に TimeOut または GoodEnoughPlanFound が返された場合、操作は必要ありません。返されたプラン表示には、正しい結果が含まれます。

StatementOptmEarlyAbortReason 属性に MemoryLimitExceeded が返された場合、生成された XML プラン表示は正しくても最適ではないことがあります。次のいずれかの方法で、使用できるメモリを増やしてください。1) サーバーの負荷を軽減します。2) SQL Server で使用できるメモリを増やします。詳細については、「大規模データベースのメモリ管理」を参照してください。3) sp_configure で設定されている max server memory オプションを確認し、値が小さすぎる場合は大きくします。詳細については、「サーバー メモリ オプション」を参照してください。

Showplan XML スキーマについて

Showplan XML スキーマのバージョン指定は、m.n の 2 部構成です。m はメジャー バージョン番号、n はマイナ バージョン番号です。たとえば、"Version 2.5" のようになります。このバージョン番号は、Showplan XML スキーマ ドキュメントのルート要素に表示されます。例 : version="0.5"

Showplan XML スキーマの旧バージョンとの互換性

メジャー バージョン番号を増加すると、新しい XML プラン表示出力では、古いスキーマに対して検証が行われないことがあります。ただし、マイナ バージョン番号を増加しても影響はありません。たとえば、スキーマ バージョン 0.5 を使用して XML プラン表示出力を生成した場合、その出力は Showplan XML スキーマのバージョン 0.6 に対しては検証が行われます。

XML プラン表示のエンコード

SQL Server では、XML プラン表示出力は、送信する文字ごとに 2 バイトを使用する Unicode 形式でクライアントに送信されます。エンコードの規則は次のとおりです。

  • If (char >= 0x0020 && char <= 0xD7FF) or (char == 0x0009) or 

    (char == 0x000A) or (char == 0x000D) or (char >= 0xE000 && char <= 0xFFFD)

    then 文字を 2 バイトで送信します、else '?' を送信します

  • タブ文字、改行文字、およびラインフィード文字は次のようにエンコードされます。

    • \t は '&#x9;' としてエンコードされます。

    • \n は '&#xa;' としてエンコードされます。

    • \r は '&#xd;' としてエンコードされます。

XML プラン表示出力のファイルへの保存

SHOWPLAN_XML または STATISTICS XML のいずれかを指定した Transact-SQL SET ステートメントを使用してプラン表示出力を生成した後、拡張子 .sqlplan を付けたファイルに出力を保存できます。たとえば、MyXMLShowplan.sqlplan のようなファイルになります。その後、これらの .sqlplan ファイルは SQL Server Management Studio で開いて表示できます。詳細については、「実行プランを XML 形式で保存する方法」を参照してください。