priority boostオプション
Windows NTは,スレッドのスケジューリングを優先度に基づいて決定している。SQL
Server 7.0のスレッドは,そのほかのアプリケーションと同様に,デフォルトでは優先度として7が設定されている。もしSQL
Serverのスレッドを優先して実行させたければ,priority
boostオプションに1を設定すればよい。この場合,SQL
Serverのスレッドの優先度は13となり,Windows
NTスケジューラはSQL Serverのスレッド処理を最優先で実行するようになる。
priority boostオプションの設定を変更するには,sp_configureシステムストアドプロシージャを利用する方法のほかに,SQL
Server Enterprise Managerのサーバープロパティを利用する方法がある。一般的には,後者を利用するほうが簡単であろう。SQL
Server Enterprise Managerのサーバープロパティを利用してpriority
boostオプションの設定を確認および変更するには,次のようにすればよい。
-
SQL Server Enterprise Managerを起動する。
-
サーバーコンピュータを選択して右クリックすると表示されるメニューから[プロパティ]を選択する。
-
[SQL Serverのプロパティ]ダイアログボックスが表示されるので,[プロセッサ]パネルを開き(Fig.9-62),[プロセッサ制御]の[Windows NTでのSQL Serverの優先度を上げる]をチェックする。
lightweight poolingオプション
SQL Server 7.0には,Windows NTのカーネルモードで実行されるスレッドベースのスケジューリング機能のほかに,ユーザーモードで動作する「Windows
NTファイバー」と呼ばれる新しいスケジューリング機能が提供されている。Windows
NTファイバーを使用すると,カーネルモードで実行されるコンテキスト切り替えに要するオーバーヘッドを減少させることができる。マルチプロセッサ構成でコンテキストスイッチング値が大きい場合にファイバースケジューリングに設定し,性能を評価する。
Windows NTファイバーによるスケジューリング機能を有効にするには,sp_configureシステムストアドプロシージャを使用してlightweight
poolingオプションを1に設定する。または,SQL
Server Enterprise Managerを次のように操作する。
-
SQL Server Enterprise Managerを起動する。
-
サーバーコンピュータを選択して右クリックすると表示されるメニューから[プロパティ]を選択する。
-
[SQL Serverのプロパティ]ダイアログボックスが表示されるので,[プロセッサ]パネルを開き(Fig.9-62),[プロセッサ制御]の[Windows NTファイバーを使用]をチェックする。
max async IOオプション
max async IOオプションは,CheckpointスレッドやLazyWriterスレッドが発行する非同期のバッチ書き込み数を制御するときに指定する。未処理の非同期ディスクI/O要求の件数がこのオプションに設定された値に達すると,SQL
ServerはディスクI/O要求の非同期送信を一時停止して実行中の非同期I/Oの完了を待機する。
Checkpoint処理とは,SQL Serverの起動時に行うデータベース修復作業を最小限にするために,SQL
Serverのデータベースファイルにダーティページを書き出す処理のことである。ダーティページとは,バッファキャッシュへの読み込み後に修正された全バッファキャッシュページであり,1ページあたり8Kバイトで構成される。バッファキャッシュから書き出すダーティページが大量にある場合,SQL
ServerはCheckpoint処理を効率よく実施するため,まずダーティページをソートし,そのあとページの順序に従ってSQL
Serverのデータファイルにダーティページを書き出してゆく。これによって,バッファキャッシュの内容を書き出すときのディスクヘッドの移動を最小限に抑え,順アクセスでディスクI/Oを実施できる。
Fig.9-63 Checkpoint処理におけるダーティページの書き出し
LazyWriter処理やCheckpoint処理では,ダーティページを書き込むためのディスクI/O要求が非同期でディスクサブシステムに送信される。この仕様により,SQL
Serverはデータが実際にディスクサブシステムによってディスクに書き込まれたことを確認するまで待機する必要はなくなる。結果的に,ディスクサブシステムはSQL
Serverが要求したディスクI/Oを高速に処理できるのである。
以上の説明からわかるように,max async
IOオプションの設定は,LazyWriterスレッドやCheckpointスレッドによるダーティページの書き出し速度に影響を及ぼす。なぜなら,LazyWriter処理やCheckpoint処理に際してWindowsを経由してディスクサブシステムに同時送信されるダーティページの数は,max
async IOオプションの設定値に従う(ただし,
max async IOオプションの値=ページ数ではないことに注意)からである。
通常のディスクサブシステムを利用しているのであれば,max
async IOオプションの値はデフォルトである32のままで十分であろう。しかし,物理ディスクが8台を超える場合やストライプデータセットを用いる場合には,64またはそれ以上の値を設定する必要がある。特に,高速なディスクI/O転送を誇るハイエンドのRAID(Redundant
Array of Indepensive Disks)サブシステムを使用する場合には,32件以上のディスクI/O転送を同時に処理する能力があるため,max
async IOオプションの値を増やさなければ,RAIDサブシステムの能力を十分に発揮させることができない。あるいは,SQL
Serverで高いディスク転送能力を要求するアクティビティを実行するのであれば,max
async IOオプションにはより大きな値を設定すべきである。RAIDなど高性能なディスクサブシステムを利用するときにmax
async IOオプションに設定すべき値は,大雑把にいって,同時に入出力可能な物理ドライブの数に2または3を掛けた値と考えてほしい。
maxasyncIOオプションに値を設定するには,クエリアナライザで次のようにしてsp_configureシステムストアドプロシージャを実行する。
sp_configure 'max async IO', value
valueには,同時に要求可能なディスクI/Oの上限値を指定する。つまり,valueの値はSQL
ServerがLazyWriterスレッドやCheckpointスレッドによる書き込み要求をWindows
NTに送信可能な数となる。max async IOオプションの設定は動的に有効となるので,設定値を変更したあとでSQL
Serverを停止させて再起動させる必要はない。
max async IOオプションの設定値を変更したときには,SQL
Serverがディスクサブシステムの能力を超えたディスクI/O要求を送信していないかどうかを調べる必要がある。実際,max
async IOオプションの設定値が大きすぎると,LazyWriterスレッドやCheckpointスレッドは多量のディスク書き込みI/O要求を待ち行列に対して発行しようとするため,SQL
Serverのワーカースレッドによる読み込みアクティビティをブロックしてしまうおそれがある。したがって,ディスクI/O要求の状況を調べるには,読み込みの待ち行列と書き込みの待ち行列の両方を監視しなければならない。待機中のディスクI/O要求の数は,パフォーマンスモニタのPhysical
DiskオブジェクトとLogical DiskオブジェクトのAverage
Disk Read Queue Lengthカウンタで監視することができる。また,読み込みの待ち行列は,DBCC
SQLPERFステートメントで監視することができる。
このとき,ディスクの読み込みI/O要求が許容できないレベルで待ち行列に蓄積されるのであれば,CheckpointスレッドやLazyWriterスレッドの書き込み処理とワーカースレッドの読み込み要求を同時に処理できるように,max
async IOオプションの設定値を減らす必要がある。あるいは,何らかの理由でmax
async IOオプションの値を維持する必要があるなら,ディスクの待ち行列が許容レベルに収まるように,ディスクサブシステムの構成を変更すればよい(たとえば,高性能なRAIDシステムを導入したり,ディスクを大量に追加したりする)。逆に,利用しているディスクサブシステムの性能が高く,読み込みI/O要求の待機量を許容範囲内にとどめたうえで増加した書き込みI/O要求を処理できるのであれば,max
async IOオプションの値を増やし,LazyWriterスレッドやCheckpointスレッドによる書き込みの実行回数を増やしてもかまわない。
| Chapter 9 30/46 |
