スポンサーリンク
明日を、もっと、ハッピーに!『ショップジャパン』
スポンサーリンク
au PAY マーケット

SQLServerで、SQLがパラレル処理されない場合は、実行プランを丸ごと固定する

SQL Server 2005

SQLServerは、SQL処理時間がcost threshold for parallelismの値(デフォルト5秒)を超えるような場合、1つのSelect文であっても、シリアルではなくパラレルで処理します。
パラレル処理されれば1分程度で終わるSQLも、シリアルで実行されると数時間かかるという事も珍しくありません。

今回、サーバーの状態によって実行プランが変化し、パラレルで実行されてほしいSQLが、シリアルで処理される現象が発生しました。
開発環境のサーバーだと、必ずパラレル処理されるのに、本番系のサーバーではシリアルで処理され、極端に処理時間がかかるようになりました。
当初は、本番系のサーバーでもパラレル処理されていました。

チューニングアドバイザーを実行し直し、インデックスと統計情報を追加しても、ヒント文でインデックスを固定しても、cost threshold for parallelismの値を1に変更しても、パラレル処理されるようにはなりませんでした。
最終的には、問題のSQL限定で、開発環境のサーバーで使われている実行プランを丸ごと使い、実行プランを完全に固定してしまう事で、パラレル処理されるようになりました。

 

実行プランを完全固定したサンプルSQLはこちら。

Sample.sql

 

SQLがシリアル実行されていた時の実行プラン。

Before

 

SQLがパラレル実行されていた時の実行プラン。

After

コメント

スポンサーリンク
HP Directplus -HP公式オンラインストア-
スポンサーリンク
フェリシモ「コレクション」
タイトルとURLをコピーしました