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 XML、Showplan XML for Query Compile、Showplan 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 属性が返されます。この属性に表示できる値は、TimeOut、GoodEnoughPlanFound、および 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 は '	' としてエンコードされます。
\n は '
' としてエンコードされます。
\r は '
' としてエンコードされます。
XML プラン表示出力のファイルへの保存
SHOWPLAN_XML または STATISTICS XML のいずれかを指定した Transact-SQL SET ステートメントを使用してプラン表示出力を生成した後、拡張子 .sqlplan を付けたファイルに出力を保存できます。たとえば、MyXMLShowplan.sqlplan のようなファイルになります。その後、これらの .sqlplan ファイルは SQL Server Management Studio で開いて表示できます。詳細については、「実行プランを XML 形式で保存する方法」を参照してください。