SQLをうまく書くことだけがチューニングではありません。まずは、この3つの設定をチェックすることからはじめよう(編集部)
前回、設定された値を見るだけでDB管理者の力量が見える、ということに触れました。今回も必ず押さえておきたいパラメータを、なぜそのように設定すべきかという理由と併せて解説していきます。
設定すべきポイントは大変シンプルです。
もちろん、これだけ変更すれば、その部分における最低限のチューニングは完了します。しかし1つ上のエンジニアを目指すなら、その理由まできっちり知っておくべきでしょう。その理由を知ることで、監視ツールや動的管理オブジェクトが発する「声」をより多く聞くことができるようになるからです。
こちらは前回、ラッチの解説で取り上げました。Latchを最小限にするために、tempdb(一時表領域)の数はCPUコア数(スケジューラ数)と同じ数だけ用意してください。
これはOS側の設定です。64bit環境を使っているDB管理者は、Windowsのローカルポリシー、ユーザー権利の割り当てにおける「メモリ内のページのロック」に、SQL Serverの実行ユーザーを追加します。これだけです。MSDNのドキュメントは日本語も英語もどちらも大変不親切で、やるべきなのかやらなくてもいいのかが分かりにくいのです。結論からいうと、これは必ず設定すべきです。
【参考】
4GBを超える物理メモリに対するメモリサポートの有効化
http://msdn.microsoft.com/ja-jp/library/ms179301.aspx
Lock Pages in Memoryオプションを有効にする方法(Windows)
http://msdn.microsoft.com/ja-jp/library/ms190730.aspx
これは、SQL Serverの実行ユーザーが、メモリの連続領域を確保するために設定すべき項目です。64bit環境であればメモリはふんだんに搭載しているはずです(第2回「CAT秘伝、バランスド・システムの考え方」参照)。この設定をしておかないと、物理的に連続したメモリ領域を確保できないため、せっかく搭載したメモリを有効に活用できません。そのためにこの権限を与える必要があります。
もし64bit環境を利用していたならば、SQL Serverのログをみてください。もしそこに「Cannot use Large Page Extensions: lock memory privilege was not granted.」と表示されていたとしたら、連続領域が確保されていない状態で動作していることになります。すぐにローカルポリシーを見直し、設定を変えてみてください。正しく設定されていれば、ログには「Large Page Granularity: 2097152」 (2MB)、および「Large Page Extensions enabled.」と表示され、プロセスはそれぞれ2MBの物理的に連続したメモリ領域を確保していることが確認できます。
Copyright © ITmedia, Inc. All Rights Reserved.