この特集のトップページへ

max worker threadsオプション

 SQL Serverは,クライアントからデータベースサーバーに送信されてきたTransact-SQLステートメントのバッチを実行するために,Windowsのユーザースレッドをそのバッチに割り当てる。このスレッドの集合がユーザースレッドプールであり,このユーザースレッドプールは「ワーカースレッド(worker threads)」と呼ばれる。バッチを送信しているコネクション数がmax worker threadsオプションに指定された値より多ければ,ワーカースレッドはバッチを送信しているコネクション間で共有される。多くの場合は,デフォルトの255で問題なく動作するだろう。むしろ,デフォルト値(255)は同時接続するユーザー数によっては大きすぎるかもしれない。指定したmax worker threadsオプションの設定値に満たない同時接続数しかない場合でも,設定されたスレッド分のメモリが確保され,バッファキャッシュなど,ほかの用途にメモリが解放されることはない。
 一般的に,max worker threadsオプションには同時接続数と最適化した値を設定すべきであるが,1024以上の値を設定することはできない。  なお,max worker threadsオプションは,SQL ServerがWindows 95上およびWindows 98上で動作しているときは効果がないので注意してもらいたい。  ワーカースレッドの設定は,SQL Server Enterprise Managerから[SQL Serverのプロパティ]ダイアログボックスを表示させ,[プロセッサ]パネル(Fig.9-62)を開いて[ワーカースレッド最大数]の値を変更する。

index create memoryオプション

 index create memoryオプションは,テーブルにインデックスを設定するときのソート操作で使用されるメモリサイズを制御するオプションである。インデックスを作成するときにこのメモリサイズを大きくすると,インデックスの設定性能を改善できる。  しかし現実には,本番システムにおいて頻繁にインデックスを設定することはないであろうし,実行するとしてもオフピーク時間に実行するようにスケジューリングされていることがほとんどだろう。それゆえ,通常はindex create memoryオプションにあまり大きな値を設定する必要はないと思われる。

fill factorオプション

 インデックスページまたはデータページに定義されているデータの論理順に従って新しい行を挿入するだけの領域がない場合,SQL Serverは新たなページを取得し,両方のページが空き領域を持つようにデータの約半分を新しいページへと移す。このようなページ分割処理が発生すると,ディスク領域と時間を消費してしまうことになる。
 そこでSQL Serverでは,ページにあらかじめ空き領域を作成し,ページ分割の発生を抑制できるようになっている。データベースの管理者は,インデックスを作成するとき,インデックスページに確保する空き領域の比率(%)をFILL FACTOR値として設定する。デフォルトである0を選択した場合,インデックスページに空き領域が存在してもページ分割が生じる。もし,データ挿入の操作が多いのであればfill factorオプションに40〜60の値を,挿入操作が少ないのであれば70〜90の値を,それぞれ設定するとよい。  fill factorオプションに大きな値を設定すればページ分割を抑制することは可能だが,利用するページ数が増大してディスク容量を消費するおそれがあるうえ,各ページに含まれるデータ量が相対的に減少して検索効率が低下する。したがって,fill factorオプションに値を設定するときには,十分な検討が必要である。通常はデフォルト値(0)のまま変更する必要はないだろう。

Fig.9-64 SQL Serverのプロパティ(データベースの設定)

time sliceオプション

 time sliceオプションには,ユーザープロセスの切り替え時間を設定する。小さな値を設定すれば,プロセス切り替え処理のオーバーヘッドのためにシステム全体の性能が低下するおそれがある。また,大きな値を設定すればプロセスの切り替えが遅くなって,サーバーの応答時間が遅くなる可能性がある。デフォルトは100ミリ秒である。通常は値を変更する必要はない。

recovery intervalオプション

 SQL Serverは,recovery intervalオプションで設定されている周期で各データベースに対してCheckpoint処理を実行する。つまり,recovery intervalオプションの設定値は,システム障害が発生したときにSQL Serverがデータベースを自動復旧するのに要する時間を表す。デフォルトではSQL Serverが最適な時期を自動的に判断するので,通常は値を変更する必要はない。

 デフォルトの設定が適切であるかどうかを確認したければ,Windows NTのパフォーマンスモニタを使用してデータベースファイル上のディスク書き込みアクティビティを監視する。100%に達するようなディスク利用を生じるアクティビティが存在するのであれば,そのアクティビティはシステムに影響を及ぼすおそれがある。その場合は,Checkpoint処理の頻度が低くなるようにrecovery intervalオプションの値を変更すると,システム全体の性能を改善できる可能性がある(復旧時間が長くなるトレードオフがあることも忘れてはならない)。recovery intervalオプションの値を変更した場合には,新しい設定値が性能を改善しているか否かを確認するため,性能の監視を継続する必要があるだろう。
 recovery intervalオプションの設定値を変更するには,次のようにする。

  1. SQL Server Enterprise Managerを起動する。
  2. サーバーコンピュータを選択して右クリックすると表示されるメニューから[プロパティ]を選択する。
  3. [SQL Serverのプロパティ]ダイアログボックスが表示されるので,[データベースの設定]パネル(Fig.9-64)を開いて[復旧]の[復旧間隔(分)](recovery interval)に任意の時間を設定する。

そのほかのサーバー構成オプション

 そのほかにも,設定する可能性のあるサーバー構成オプションは存在する。代表的なものだけをまとめておこう。

○query governor cost limitオプション
 SQL Serverが稼働しているサーバーでクエリを実行するのに必要な最大予測時間を秒単位で指定する。この値を「クエリコスト」と呼ぶ。実行時間がここで指定された時間を超えるクエリは,実行を停止される。これによって,1つのクエリが長時間システムリソースを使用するのを防ぐことができる。デフォルトは0で,クエリは完全に完了するまで実行される。接続ごとに値を変更するには,SET QUERY_GOVERNOR_COST_LIMITステートメントで設定する。

○remote login timeoutオプション
 リモートサーバーへの接続時にリモートログインが成功するまで待っている時間を秒単位で設定する。デフォルトは0で,ログインが成功するまで無限に待っていることになるので,評価して適切な値,たとえば評価値の1.5倍とか3倍に設定する。 ○remote query timeoutオプション  リモートサーバーに送信したリモートクエリの応答を待機したりする時間を秒単位で指定する。デフォルトは0で,応答が返されるのを無限に待機することになる。評価したうえで,必要に応じて適切な値を設定する。異種クエリの場合は,クエリがタイムアウトするまでリモートプロバイダが結果セットを待機する時間を意味する。

○resource timeoutオプション
 メモリバッファ,ディスク,ネットワーク,ログといったサーバーリソースに非同期I/O要求をしたときに,これらのリソースが解放されるのを待っている時間を秒単位で指定する。デフォルトは10で,10秒以内に完了しないすべての操作に対してタイムアウト警告を発行する。通常はデフォルトのままでよい。この設定の値が小さすぎると,実際に何もできないうちにタイムアウトになる可能性がある。SQL Serverのエラーログにlogwriteタイムアウト警告またはbufwaitタイムアウト警告が複数記録されている場合は,この値を大きくする。

前へ Chapter 9 31/46 次へ