毎月 8 日を「サポート・サービスディ」とし、障害以外の製品利用技術に関してお客様からのご質問や疑問にお応えする機会を設けました(こちらは無償となります)。相談されたい案件をお持ちのお客様は、毎月10日から20日までの期間内に以下をご記載の上、ms8spday@microsoft.com 宛に電子メールをお送りください。 なお、弊社までお越しいただくことが難しい場合はオンライン会議での対応も可能ですので、是非ご検討ください。
①サポート契約番号 ②相談事項概要 後程、弊社担当者よりご連絡を差し上げ日程等を調整させて頂きます。 場所:日本マイクロソフト(株) 調布技術センター 対象製品:SQL Server, Internet Information Server, Internet Explorer, Visual Studio, SDK(但し最新バージョンと一世代前のバージョン) および Dynamics CRM 受付期間:毎月10日から20日までの期間 サポート・サービスディ:休日を除く毎月8日 午前10:00-午後05:00 議題:お客様相談事項 時間:2-3時間の予定 弊社参加者:マネージャ、エンジニア
詳細はこちら
神谷 雅紀 Escalation Engineer
今回は、急に実行プランが変わったと思われる場合に、確認すべき実行プラン中の項目をひとつ紹介します。
同じクエリの実行プランが変わるということは、最適化時 (実行プラン選択時) に参照されるデータが変わったということです。参照データのひとつであるクエリ内のパラメータ値は、ParameterCompiledValue で確認可能です。
パラメータ化クエリやストアドプロシージャの実行時に、XML 実行統計 (SET STATISTICS XML ステートメント や Showplan XML Statistics Profile イベント) を採取すると、最適化時に使用されたパラメータ値と実行時に使用されたパラメータ値が含まれています。キャッシュされている実行プランが再利用された場合、これらの値は異なる可能性があります。
例 <ParameterList> <ColumnReference Column="@p1" ParameterCompiledValue="(10)" ParameterRuntimeValue="(50000)" /> </ParameterList>
ParameterCompiledValue がこの実行プラン選択時に指定されていたパラメータ値です。ここに示される値を用いて、実行プランが変わった原因がパラメータ値にあるのかどうかを切り分けることができます。
DBCC FREEPROCCACHE で対象クエリの実行プランをプロシージャキャッシュから削除した後に、ParameterCompiledValue に示されているパラメータ値でクエリを実行した場合には想定しない実行プランが生成され、ParameterCompiledValue に示されている値ではない典型的な値で実行した場合には想定どおりの実行プランが生成されるようであれば、問題の実行プランとなった原因はパラメータ値にあることになります。
この確認を行う際に注意しなければならないのは、クエリを実行する接続の SET オプションです。 SET オプションが異なれば、同じクエリを実行しても、実行プランは異なります。実行プラン選択時に指定されていた SET オプションは、XML 実行統計内の StatementSetOptions に示されます。
例 <StatementSetOptions QUOTED_IDENTIFIER="true" ARITHABORT="true" CONCAT_NULL_YIELDS_NULL="true" ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" NUMERIC_ROUNDABORT="false" />
ParameterCompiledValue に示されているパラメータ値が、通常は指定されないような非典型的なパラメータ値である場合には、DO's&DONT's #3: やらなければいけないこと - 非典型的パラメータ値が存在する場合の再コンパイル (Atypical Parameter Problem の対応) で取り上げた問題が発生するため、その問題を避けるための対応が必要です。
尚、最適化時に参照されるもうひとつのデータである統計情報が変わったかどうかは、stats_date 関数や DBCC SHOW_STATISTICS で統計情報の更新日時を確認すれば分かります。