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


○Memory:Pages/secとMemory:Page Reads/sec
 Memory:Pages/secカウンタは,物理メモリ上に存在しないページを仮想メモリから取り出すために,Modified状態のページをディスクに書き出したり,要求されたページをディスクから読み込んだりした総数を表す。このカウンタの値は,Pages Output/secカウンタの値(Modified状態のページをディスクに書き出した回数)とPages Input/secカウンタの値(要求されたページをディスクから読み込んだ回数)の合計である。
 Memory:Page Reads/secカウンタは,物理メモリ上に存在しないページを仮想メモリから取り出すために実行したディスクの読み取り回数である。1回の読み取り処理で複数のページを読み込むことができる。
 Memory:Pages/secカウンタおよびMemory:Page Reads/secカウンタの値は,Windowsがメモリへの参照を解決するためにディスクへとアクセスするので,「ハードページフォルト」と呼ばれる*1。ハードページフォルトが増加すると,ディスクとプロセッサへの負担が増大する。Memory:Pages/secカウンタの値が0または0に近い値であれば,データベースサーバーの性能にはほとんど影響はない。つまり,Windows NTやSQL Serverあるいは任意のアプリケーションがメモリを要求しても,十分に用意された物理メモリが利用されるため,ページファイルにアクセスすることはないのである。
 通常は,Memory:Pages/secカウンタの値が20以上であればメモリ不足に陥るおそれがあり,50に近いかまたは超えているならばページI/Oがディスクのボトルネックになっていると考えられる。この場合は,物理メモリを追加すべきである。メモリがボトルネックであるか否かは,このカウンタの値だけでなく後述するPhysicalDisk:Avg.Disksec/TransferカウンタまたはLogicalDisk:Avg.Disksec/Transferカウンタの値も併せて評価してみるとよい。
 たとえば, Memory:Pages/secカウンタの値が20,PhysicalDisk:Avg.Disksec/Transferカウンタの値が0.02(20ms)であったとすると,その積は20×0.02=0.4秒となる。この場合,1秒間のうち400ミリ秒(つまり40%)がメモリへのページ読み込みに使用されていることになり,状況によってはページファイルの利用頻度が高すぎると考えられる*2。また,Memory:PagesReads/secカウンタの値が5を超えている場合にも,物理メモリが不足していると考えられる。この場合も,Windows NTのページファイルが存在するドライブのLogicalDisk:DiskReads/secカウンタの値を評価して,ディスクI/O全体に占めるページファイルI/Oの割合を調査し,メモリがボトルネックであるか否かを知ることが必要になる。LogicalDisk:Disk Reads/secカウンタは,選択したディスクドライブにおける秒あたりのディスクI/O数を示しており,Memory:Page Reads/secはディスクへのページングによるディスクI/O回数を示している。つまり,両方のカウンタ値が近似しているならば,ディスクI/Oのほとんどがメモリマネージャのページング処理に起因していることになるので,物理メモリの不足であることがわかる。たとえば,LogicalDisk:Disk Reads /secカウンタが15でMemory:Page Reads/secカウンタが9であれば,ディスクI/Oの60%がページングに起因するディスクI/Oとなるので,物理メモリを追加する必要がある。
 以上のように評価した結果,ページングによるディスクI/Oが大きい場合に,ページングがディスクのボトルネックを引き起こしているか否かを判断するためには,あとで説明するAvg. Disk Queue Lengthカウンタの値などを評価する必要がある。

○Memory:Page Faults/sec
 このカウンタは,プロセス内で発生したページフォルトの回数を表す。ページフォルトは,プロセスがメモリ上のワーキングセットに存在しない仮想メモリページを参照したときに発生する。
 Memory:Page Faults/secカウンタの値は,ハードページフォルト(ディスクI/Oを必要とするページフォルト)の発生回数とソフトページフォルト(ワーキングセット以外のメモリ内で解決されたページフォルト)の発生回数を合計したものである。ハードページフォルトはディスクI/Oリソースを消費し,ソフトページフォルトはプロセッサリソースを消費する。Memory:Page Faults/secカウンタに対するMemory:Pages Input/secカウンタの比率が高ければ過度のページングによってディスクのボトルネックになっている可能性がある。

 ソフトページフォルトの発生回数は,次のような式で求められる。

   Soft Page Faults/sec=Memory:Page Faults/sec − Memory:Pages Input/sec 

 ただし,SQL Serverが実際にすべてのデータキャッシュページにアクセスし終えるまで,各ページに対する最初のアクセスでソフトページフォルトが発生する。このため,SQL Serverの起動時およびデータキャッシュが最初に機能するときに発生する初期のソフトページフォルトは無視してよい。  各プロセスごとのページフォルトを監視したときに,すべてのアプリケーションでページフォルトの発生回数が近似値をとるならば,物理メモリが不足しているということである。過度のページファイルI/Oを発生させる原因となっているのがSQL Serverであるか否かを判断するには,SQL Serverプロセス(sqlservr.exe)のProcess:Page Faults/secカウンタの値を監視する。もし1秒あたりのページフォルト数がMemory:Page Faults/secカウンタの値と近似値であれば,ページファイルI/Oを発生させている原因はSQL Serverにある。個々のプロセスがどれだけページフォルトを発生させており,それらがシステム全体にどれだけ影響を与えているかのを判断する場合には,ProcessオブジェクトのすべてのProcessインスタンスのPage faults/secカウンタ値を観察する。

Fig.9-72 ページフォルトの観察



  1. ページフォルトはメモリに必要なデータがないときに,すなわち読み込み時にのみ発生する。その際,読み込むページの空き領域を作成するために既存のページを書き出すことがある。したがって,ページフォルトが発生したからといって,必ずしも書き込みが発生するとは限らない。メモリのボトルネックを評価する場合,この書き込みを評価することは少ない。ただし,ディスクのボトルネックを評価するときには,書き込みの評価が必要になる。
  2. どの程度の値が適切であるかは,性能をどこまで要求するのか,何をするのかによる。ユーザーが性能に満足しているのであれば,500ミリ秒でも700ミリ秒でもかまわない。しかし,一般的に,Memory:Pages/secカウンタが10以下であれば,性能的な問題は発生しないと思われる。PhysicalDisk:Avg. Disk secカウンタの値については,アクセス方法,転送ブロック長,使用インターフェイスなどによって異なるので,一概にはいえない。一般的には数ミリ秒から数十ミリ秒が適切と考えられる。
前へ Chapter 9 39/46 次へ