SSブログ

クエリ並列処理の並列度についてお勉強 [SQL Server]

昨今のマルチコア化でクエリ並列度について色々考えることがありました。
調べたことを記載していきます。

SQL ServerはOracleと違い、自動でクエリオプティマイザが並列処理を選択します。
並列処理では1つのクエリを複数スレッドで実行することで効率アップを目指しています。

さてクエリの並列度は以下の条件で決まります。
http://msdn.microsoft.com/ja-jp/library/ms188611.aspx
より
・CPU数
・空きスレッド数
・クエリとインデックスの状況
・行数
・統計情報

また
http://msdn.microsoft.com/ja-jp/library/ms178065.aspx
この情報からクエリ実行時に並列度が決まることがわかります。
なので、実行するタイミングによって並列度が変わる、ということがわかります。

そして1点気になる記載を見つけました。
「動的カーソルの一部であるクエリに対しては必ず直列実行プランを生成します」
つまり動的カーソルだと良くも悪くも直列になるということです。
もし並列で動かしたかったら静的カーソルで動かす、というチューニングもありだなと思います。
(最も今もなおカーソルを使うか、という議論は残りますが)

並列度はその他maxdopというクエリヒントまたはmax degree of parallelismというプロパティでも
制御することが可能で、以下にそのガイドラインがあります。
http://support.microsoft.com/kb/329204/ja

並列度が上がりすぎたが故に起こる問題(スレッド不足や並列処理によるリソース消費)
に対して有効に働きます。既定値は0、つまりCPU数の範囲で自動制御になるので
メニーコア+OLTP系であれば引き下げを検討してはいかがでしょうか。

今更な情報も多いですが、自分のメモがてら。
nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:仕事

nice! 1

コメント 0

コメントを書く

お名前:[必須]
URL:[必須]
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。