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

○Memory:Pool Nonpaged Bytes
 このカウンタは,Windows NTが使用するページアウトできないシステムメモリ領域を表す。この値が物理メモリのサイズに近いと,システムがストールしてしまうことがある。Memory:Available Bytesカウンタの値を調べ,定常的に4Mバイト以下になるようであれば,物理メモリを追加するか,アプリケーションのワーキングセットを調整してアプリケーションが要求するメモリ量を小さくする。アプリケーションを調整する場合は,Platform SDK(Win32 SDK)のツール*1(Working Set Tunerなど)を使用し,必要なメモリサイズの最適化を図る。

○Server:Pool Nonpaged Failures
 このカウンタは,物理メモリが小さすぎ,ページアウトできないシステムメモリ領域からの割り当てに失敗した回数を示す。カウンタの値が1以上であれば,物理メモリを追加する必要がある。

○Server:Pool Paged Failures
 このカウンタは,物理メモリが小さすぎ,ページアウト可能なメモリ領域からの割り当てに失敗した回数を示す。カウンタの値が1以上であれば,物理メモリを追加する必要がある。

○SQLServer:Cache Manager:Cache Hit Ratio
 このカウンタは,アプリケーションから要求されたデータがSQL Serverのバッファキャッシュから発見された比率を示す。ヒット率は90%以上が好ましいが80%に満たない場合,バッファキャッシュのサイズが小さい。つまり,物理メモリの不足が考えられる。したがって,物理メモリを追加して,ヒット率が90%以上になるようにバッファキャッシュのサイズを大きく割り当てられるようにする。

○SQLServer:Buffer Manager:Page Reads/sec
 このカウンタは,SQL Serverが要求したデータの存在するページを物理的にデータベースから取り出すために実行したディスクI/Oの回数を表す。このカウンタ値に対するSQL Server(sqlservr.exe)やそのサーバープロセスのProcessor:Page Faults/secカウンタの比率が一貫して高い場合には,物理メモリが不足している。インデックス設計の不良(適切なインデックスが設定されていない)や論理データベース設計の不良(行長が大きい)が原因の場合もある。

○SQLServer:Buffer Manager:Lazy Writes/sec
 このカウンタは,バッファマネージャのLazyWriter処理によって1秒間にディスクに書き出されたページ数を表す。一貫して高い場合は,SQLServer:Buffer Manager:Free Bufferカウンタの値とLRU thresholdの*2を比較し,近似であればバッファキャッシュが不足しているので,max server memoryオプションを調整するか,物理メモリを追加する。

メモリのボトルネックの解決法

 メモリのボトルネックを解決するためには,ハードウェアを追加して解決を図るか,あるいはオペレーティングシステム側でSQL Serverに割り当てるメモリサイズを調整することが基本となる。アプリケーションレベルでの解決策は,労多くして効果のほどは小さい。利用可能なメモリ領域を増やすためには,不必要なWindows NTサービス,ドライバ,ネットワークプロトコルを削除することである。そのためにも,SQL Serverは専用のサーバーで動作させるのがよい。また,ページファイルを大きくするか,別のページファイルを追加する方法もある。
 パフォーマンスモニタのオブジェクトおよび対応するカウンタ値を調べ,メモリのボトルネックが検出されるならば,次のような対策を検討する。

  • DBCC SQLPERF(LRUSTATS)ステートメント(Fig.9-58参照)でFree Page Scan(Avg)カウンタの値(フリーバッファプールの未使用バッファを検索するときにLazyWriterスレッドがデータキャッシュバッファを検索した平均回数)やFree Page Scan(Max)カウンタの値(フリーバッファプールの未使用バッファを検索するときにLazyWriterスレッドがデータキャッシュバッファを検索した最大回数)を監視し, Free Page Scan(Avg)カウンタの値が10を超えている場合,またはFree Page Scan(Max)カウンタの値が100を超えている場合には,メモリを追加するか,あるいはrecovery intervalサーバー構成オプションを調整する
  • Memory:Page Faults/secカウンタの値が一貫して高く,SQL Serverの負荷に応じて増減する場合には,物理メモリが少ない可能性がある。Memory:Available Bytesカウンタの値を監視し,常に4Mバイト以下となるのであれば,物理メモリを追加する。また,SQL Serverやほかのプロセスに割り当てられているメモリを削除し,Windows NTで利用可能な空きメモリの容量を増やす
  • SQL Serverに割り当てられているメモリを検証する(Windows NTには最低16Mバイト必要)。SQL Serverに割り当て可能なメモリを増やすため,物理メモリを追加する。できれば256Mバイト以上にする
  • 仮想メモリのサイズが適切であるかどうかを確認する。仮想メモリの最大サイズは常にMemory:Committed Bytesカウンタの最大値以上,SQL Serverを利用するのであれば物理メモリサイズの1.5倍以上に設定する。また,全文検索やSAPのようなアプリケーションを動作させるならば物理メモリサイズの3倍以上に設定する
  • 拡張ストアドプロシージャを多数使用している場合は,それらの実行後にDBCC dllname(FREE)ステートメントを実行し,DLLをメモリから削除する
  • ページファイルは,SQL Serverのデータベースファイルを格納するドライブとは別のドライブに配置する
  • 不要なサービス,ドライバ,ネットワークプロトコルを削除する
  • テーブルの行長が長くないかを検証する(行長が長ければ短縮する)
  • インデックスの列長が長くないかを検証する

  1. Platform SDKは,MSDN(MicroSoft Developer Network)のプロフェッショナル・サブスクリプション以上に配布されるDeveloper Platform CD-ROMに収録されている。また,Microsoft社のホームページから入手することもできる。
  2. パフォーマンスモニタのSQLServer:Buffer ManagerオブジェクトのCache Size×3%である。
前へ Chapter 9 40/46 次へ