連載
» 2010年09月06日 00時00分 公開

真・Dr. K's SQL Serverチューニング研修(4):DB管理者がいますぐ確認すべき3つの設定 (2/3)

[熊澤幸生,株式会社 CSK Winテクノロジ]

その3:OLTPでは、並列処理の最大限度(Max DOP)はCPUコア数の「4分の1」に設定せよ

 次に、Max DOP を説明しましょう。こちらはサーバのプロパティ、詳細設定で、「並列処理の最大限度」で指定します。

図4 並列処理の最大限度の設定値を見る 図4 並列処理の最大限度の設定値を見る

 この設定は「Max DOP : Max degreee of parallelism」、並列処理可能な実行プランの最大値です。既定値は「0」、これは無制限を意味します。スケジューラに余裕があれば、並列処理が行えますが、あまり大きな値に設定すると、オーバーヘッドによりトランザクション処理が遅くなります。既定値はゼロ、つまり無制限なのでこのままではいけません。

 そこで、CATの推奨する値を教えましょう。OLTP処理では、論理CPUコア数の「4分の1」、またはNUMAノード上のCPUコア数(ソケット上のCPUコア数)の、どちらか小さい値に設定します。これは彼らの経験からでてきた数値です。

図5 並列処理可能な実行プラン。黄色い○に矢印が付いている処理は並列処理可能 図5 並列処理可能な実行プラン。黄色い○に矢印が付いている処理は並列処理可能

 図5を見てください。この図のアイコンのいくつかに黄色い丸に矢印が付いたマークが見えると思います。このマークが付いた実行プランのステップは、CPUのスケジューラに余裕があれば複数のスケジューラで実行することで、処理時間を短くできる可能性があります。例えばJOIN処理や、クラスタ化のインデクシングなどが並列処理可能なものですね。Max DOPで設定した値まで、処理を多重化できるのです。

 私はCPUが12個あるマシンを試験環境として使っていますが、この場合ですとMax DOPを「3」としています。

 かといって、あまりこの値を大きくすることは望ましくありません。トランザクション処理は公平にスケジューリングされるよう動作しますので、大きくしすぎるとボトルネック(トランザクションの同時実行性が低下する)が発生します。CATからはベストプラクティスとして「4分の1」が指示されていますので、まずはこの値に設定することから始めてください。

すべてのチューニング可能なパラメータを表示するためにはアドバンスオプションを変更せよ

 アドバンスドオプションを設定するには、以下を実行します。

sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
リスト1 「sp_configure」で拡張オプションを表示させる設定変更

 これにより、表示される項目が16項目から70項目に増えます。先に紹介したMax DOPはアドバンスオプション扱いになっています。実は、このアドバンスオプションは隠されているので、本来は触るべきではありません。基本的にはこのMax DOPだけを変更するようにしてください。

コラム

アドバンスオプションには、「xp_cmdshell」というものもあります。これはコマンドシェルを実行可能かどうかの設定で、現在はデフォルトでオフですが、オンになっていた時代(SQL Server 2000)もありました。そう、これが私たちを苦しめたSQLインジェクションで利用された機能の1つです。


 これらは、ほとんどの環境でいますぐチェックすべき項目です。ぜひ、無駄な動きを省いて、このチューニングを終わらせておきましょう。SQLのチューニングはそれからでも遅くはないです。

Copyright © ITmedia, Inc. All Rights Reserved.

編集部からのお知らせ

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。