パフォーマンス カウンタについて

検証方法

ここに取り上げたパフォーマンス カウンタは、一般的なシステム状況のチェック、およびパフォーマンス基準との比較判断に役立ちます。これらのパフォーマンス カウンタを約 60 分間実行して、1 分から 3 分の更新間隔を取ります (この間隔は、カウンタ ログの [プロパティ] パネル、またはパフォーマンス設定パネルおよび画面で設定します)。

メモリ使用率の監視

¥Memory¥Available Mbytes

注: メモリ不足は、SQL Server バッファ キャッシュの効果を低下させます。

説明 : Available MBytes カウンタは、コンピュータ上で実行するプロセスが使用可能な物理メモリの容量を、メガバイト (1 メガバイトは 1,048,576 バイト) 単位で表します。この容量は、Zeroed、Free、 Stand by の各メモリ リストにある空間を合計して算出します。Free メモリはすぐに使用できる空間です。Zeroed メモリはゼロでクリアされたメモリ ページで、前のプロセスが使用したデータを後のプロセスに参照させません。Stand by メモリは、プロセスの作業セット (プロセスの物理メモリ) からディスクへのルートに削除されたメモリですが、再利用できます。このカウンタは、平均値ではなく最後にチェックされた値を表示します。

¥Memory¥Pages/sec

注: 0 に近いほど適正なレベルです。

説明 : Pages/sec は、ハード ページフォルトを解決するためにディスクとの間で読み書きされるページの数を表します (ハード ページフォルトは、プロセスにおいて必要なコードまたはデータが作業セットまたは物理メモリの他の場所にも存在せず、ディスクから取得しなければならないときに発生します)。このカウンタは、システム全体の遅延を招くページフォルトを示す主要なインジケータとして設計されました。その値は、Memory: Pages Input/sec と Memory: Pages Output/sec との合計です。値はページ数によるカウントであるため、変換作業を伴うことなく、Memory: Page Faults/sec などの他のページ カウント値と比較することができます。このカウンタ値は、キャッシュされずにマップされるメモリがファイルするファイル システム キャッシュ (通常アプリケーションが要求) におけるページフォルトを処理するために取得されたページを含みます。このカウンタは、最後の 2 つのサンプリング値の差をサンプル期間の長さで割った値を表示します。

このカウンタの値が高いほど、ハード ページフォルト (OS がメモリを確保するためにディスクにアクセスする) がディスク I/O および CPU リソースに負担を与えていることを示します。この問題を解決するには、さらに RAM を追加するか、データベース サーバーから他のアプリケーションを削除します。また、SQL Server が使用可能なメモリ容量を制限する方法もあります。オペレーティング システムの機能上、通常はページングが発生することに注意してください。

¥Memory¥Cache Faults/sec

:

説明 : Cache Faults/sec は、ファイル システム キャッシュで要求されるページがそこになく、メモリの他の場所 (ソフトページフォルト) またはディスク (ハードページフォルト) から取得しなければならないときに発生するページフォルトの数を表します。ファイル システム キャッシュは、最近使用したアプリケーションのデータ ページを格納する物理メモリ領域です。キャッシュの利用状況は、多くのアプリケーション入出力機能の信頼できるインジケータとなります。このカウンタは、各動作のページフォルト数に関わりなくページフォルト数をカウントします。

¥Memory¥Page Faults/sec

:

説明 : Page Faults/sec は、プロセッサがページフォルトを処理する全体の割合を表し、その値は秒あたりに発生するページフォルト数で測定します。ページフォルトは、作業セット (物理メモリにあるプロセスの空間) にないコードまたはデータをプロセスが必要とするときに発生します。このカウンタは、ハードページフォルト (ディスク アクセスを必要とするページフォルト) およびソフトページフォルト (ページフォルトが物理メモリの他の場所に検出される) の両方を含みます。多くのプロセッサは、影響が表面化しないようにソフトページフォルトの多くに対処しますが、ハードページフォルトの場合は著しい遅延の原因になります。このカウンタは、最後の 2 つのサンプリング値の差をサンプル期間の長さで割った値を表示します。

CPU 使用率の監視

¥Processor(_Total)¥% Processor Time

: 75% 未満が適正です。

説明 : % Processor Time は、プロセッサがアイドル以外のスレッドを実行する時間のパーセンテージを表し、プロセッサの利用状況を示す主なインジケータとして使用できます。この値は、それぞれのサンプル期間でアイドル プロセスのスレッドを実行するためにプロセッサが費やす時間を測定し、その値を 100 パーセントから差し引いて算出します (各プロセッサにはアイドル スレッドがあり、待機中のスレッドが他にないときサイクルを消費します)。この値は、有意義な仕事に費やされるサンプル期間のパーセンテージとして見ることができます。このカウンタは、サンプル期間に見られるビジー時間の平均パーセンテージを表示し、サービスがアクティブでない時間をモニタリングしてその値を 100 パーセントから差し引いて算出します。

¥Processor(_Total)¥Interrupts/sec

:

説明 : Interrupts/sec は、プロセッサに対して発生しプロセッサが処理するハードウェア 割り込みの秒あたりの平均数です。このカウンタは、別途カウントされる DPC (遅延プロセスコール) を含みません。示される値は、システム クロック、マウス、ディスク ドライバ、データ通信回線、ネットワーク インターフェイス カードといった周辺機器など、割り込みを発生する機器の利用状況を間接的に示すインジケータとしても使用できます。通常これらの機器は、タスクの完了時または何らかのイベントが発生したとき、プロセッサに対する割り込みを発生します。割り込みが発生すると、通常のスレッド実行が一時停止します。多くのシステム クロックは、10 ミリ秒ごとにプロセッサに割り込み、割り込み状態のバックグラウンドを作り出します。このカウンタは、最後の 2 つのサンプリング値の差をサンプル期間の長さで割った値を表示します。

¥Process(sqlmangr)¥% Processor Time
¥Process(sqlservr)¥% Processor Time

:

説明 : % Processor Time は、そのプロセスのすべてのスレッドがプロセッサを使い命令を実行するのに経過した時間のパーセンテージを表します。1 つの命令は、コンピュータの処理実行の基本単位であり、スレッドは命令を実行するオブジェクト、そしてプロセスはプログラム実行時に作成されるオブジェクトです。このカウントには、ハードウェア割り込みおよびトラップ状態を処理するために実行するコードが含まれます。マルチプロセッサ マシンでは、このカウンタの最大値は 100 パーセントにプロセッサ数をかけた数値です。

CPU に大きな負荷を与えるプロセスは、このカウンタを使ってモニタできます。

¥System¥Processor Queue Length

: プロセッサあたり 2 未満が適正です。

説明 : Processor Queue Length は、プロセッサ待ち行列にあるスレッド数を表します。マルチプロセッサのコンピュータでも、プロセッサ タイムの待ち行列は 1 つです。disk カウンタとは異なり、このカウンタは待機中のスレッドのみをカウントし、実行中のスレッドはカウントしません。3 つ以上の スレッドを含む状態が続くプロセッサ待ち行列は、一般的にプロセッサの過密状態を表します。このカウンタは、平均値ではなく最後にチェックされた値を表示します。

このカウンタが、CPU あたり 2 を超える値の場合は、CPU ボトルネックを示しています。プロセッサを追加するか、システム上の作業負荷を軽減する必要があるでしょう。SQL クエリを調整してインデックスを最適な状態に配置し、I/O および CPU の利用率を軽減してください。

System¥Context switches/sec

: 15000 未満が適正です。

説明 : Context Switches/sec は、コンピュータ上のすべてのプロセッサが、あるスレッドから別のスレッドに切り替わる割合を合わせた数値です。コンテキスト スイッチは、自発的にプロセッサを放棄した実行中のスレッドが、より高い優先順位の待機中のスレッドによって差し替えられるとき、またはユーザー モードおよび特権 (カーネル) モードの間で切り替わり Executive またはサブシステム サービスを使用するときに発生します。この値は、コンピュータにあるすべてのプロセッサで実行するスレッドすべての Thread: Context Switches/sec カウンタ値の総和となり、切り替わった数によって測定します。System および Thread オブジェクトには、コンテキスト スイッチ カウンタがあり、このカウンタは最後の 2 つのサンプリング値の差をサンプル期間の長さで割った値を表示します。

値が常に 15,000 を上回る場合は、利用状況が過密状態になっておりシステムの処理速度が低下する可能性があります。この数値は、多数のプロセッサ待ち行列がある場合も、重要なチェック対象となります。

¥Processor(_Total)¥% Privileged Time
¥Processor(_Total)¥% User Time

: Total User Time 15% 未満が Privileged Time の適正値です。

説明 : % Privileged Time は、特権モードで費やされるアイドル以外のプロセッサ時間のパーセンテージを表します (特権モードは、オペレーティング システムのコンポーネントおよびハードウェア対応ドライバに合わせて設計されたプロセッシング モードです。このモードではハードウェアおよびすべてのメモリに直接アクセスできます。もう 1 つのモード、ユーザー モードは、アプリケーション、環境サブシステム、総合サブシステムに合わせて設計された、制限付きプロセッシング モードです。オペレーティング システムは、アプリケーション スレッドを特権モードに切り替えてオペレーティング システムのサービスにアクセスします)。% Privileged Time は、割り込みおよび DPC (遅延プロセスコール) に対処する時間を含みます。privileged time の割合が高い場合、障害をともなう機器によって発生した多数の割り込みが原因である可能性があります。このカウンタは、平均ビジー時間をサンプル時間のパーセンテージとして表示します。

% User Time は、ユーザー モードで費やされるアイドル以外のプロセッサ時間のパーセンテージを表します (ユーザー モードは、アプリケーション、環境サブシステム、総合サブシステムに合わせて設計された制限付きプロセッシング モードです。もう 1 つのモード、特権モードは、オペレーティング システムのコンポーネントに合わせて設計されたプロセッシング モードで、ハードウェアおよびすべてのメモリへの直接アクセスが可能です。オペレーティング システムは、アプリケーション スレッドを特権モードに切り替えてオペレーティング システムのサービスにアクセスします)。このカウンタは、平均ビジー時間をサンプル時間のパーセンテージとして表示します。

Total Privileged Time は、Total User Time の 15% 未満が適正値です。15% から 25% の場合は、ディスク アレイに問題がある可能性を示しています。このパーセンテージが 25 を超える場合は、ディスク要求を処理するために過剰な CPU サイクルを費やしていることを示してます。メモリを追加するか、より高速または容量の大きいディスクおよび

ディスク利用状況の監視

¥PhysicalDisk()¥% Disk Time

:

説明 : % Disk Time は、選択したディスクが読み取りまたは書き込み要求を処理する間に経過した時間のパーセンテージを示します。

¥PhysicalDisk()¥% Disk Time

:

説明 : % Disk Time は、選択したディスクが読み取りまたは書き込み要求を処理する間に経過した時間のパーセンテージを示します。

¥PhysicalDisk()¥Avg. Disk Queue Length
¥PhysicalDisk()¥Current Disk Queue Length

: RAID アレイ中の利用可能な物理ディスクあたり 2 未満が適正です。

説明 : Avg. Disk Queue Length は、サンプル期間に指定ディスクの待ち行列にある要求の平均数です。

Current Disk Queue Length は、パフォーマンス データが収集される時点にディスク上にある未処理の要求数を表し、スナップショット時に処理中の要求も含みます。この値は、瞬間的な長さであり、期間中の平均値ではありません。マルチ スピンドル構成のディスク装置には、一度に複数の要求をアクティブにすることが可能ですが、他の同時要求は処理を待ちます。このカウンタは、瞬間的な待ち行列の長さの度合いを表しますが、ディスク ドライブ上に持続的な負荷がある場合は、この値が常に高くなることが考えられます。要求の遅延は、待ち行列の長さからディスク上のスピンドル数を引いた値に比例します。この差の平均が 2 未満のとき、良好なパフォーマンスが得られます。

ディスク サブシステムの物理的なアーキテクチャに、常に気を配ります。RAID 0+1 のドライブに 10 の物理ディスクがある場合は、そのアレイの利用可能な物理ディスク数は 5 です。この例では、ディスク待ち行列の長さは、10 を超えてはなりません。SAN システムでは、比較的大きなディスク待ち行列のカウンタ値が見られますが、これは異常ではありません。

¥PhysicalDisk()¥Disk Reads/sec

:

説明 : Disk Reads/sec は、ディスク上の読み取り速度を表します。

¥PhysicalDisk()¥Disk Writes/sec

:

説明 : Disk Writes/sec は、ディスク上の書き込み速度を表します。

¥LogicalDisk()¥% Free Space

: ( オプション )

説明 : % Free Space は、物理ディスク ユニット上にある空き空間と指定の物理ディスク ドライブにある総利用可能空間の割合を表します。これをの目的とする場合は、diskperf を実行しないオプションも選択でき、通常は PhysicalDisk の情報だけでも十分です。

¥PhysicalDisk(_Total)¥Avg. Disk sec/Read

:

説明 : Avg. Disk sec/Read は、ディスクからデータを読み取る秒単位の平均時間です。

¥PhysicalDisk(_Total)¥Avg. Disk sec/Write

:

説明 : Avg. Disk sec/Write は、ディスクにデータを書き込む秒単位の平均時間です。

SQL Server を監視するためのカウンタ :

¥SQL Server:Databases()¥Transactions/sec

: 時間の経過にともなう負荷増大の程度を表します。

説明 : このカウンタは、サーバーがサポートするトランザクション数を表します。この数値はシステム規模の参考になるので、ハードウェア ベンダとの共同作業を行う場合に役立ちます。トランザクション負荷の増大程度をチェックするのに最適なカウンタです。

このカウンタ値が、¥SQLServer:Databases(_Total)¥Active Transactions のカウンタ値を超える場合は、サーバーの負荷が超過状態であり、サーバーの最適化を検証する必要性を示しています。

¥SQLServer:Buffer Manager¥Buffer cache hit ratio

: 100 に近いほど適正です。

説明 : バッファ プールにある、ディスクからの読み取り負荷のないページのパーセンテージを表します。

buffer cache hit ratio の値は、高いほど適正です。複数ユーザー単位でデータベースを扱うトランザクション プロセッシング システムでは、この値は 98~99 に達します。この値が小さい場合は、SQL Server にメモリを追加することによって状態を改善できます。この場合、テーブル スキャン頻度とともに参照すると、インデックス / パーティショニングのパフォーマンス改善をチェックできます。

¥SQLServer:Access Methods¥Full Scans/sec

:

説明 :インデックスの作成に利用します。このカウンタは、テーブルまたはインデックスの秒あたりのフル スキャン数を示します。この数値が 1 または 2 より高い場合は、その原因となっているコードを最適化できるかどうか調べる必要があります。通常 OLTP アプリケーションは、テーブル スキャンの利用を最小化します。

アプリケーションのストアド プロシージャが tempdb データベースを使って一時テーブルから情報を返す場合は、この数値は大幅に高くなります。その理由は、tempdb テーブルがほとんどインデックス付けされないからです。このこと自体は問題ではありませんが、ユーザー数が多いことが考えられるため、Web アプリケーションでは避けるべきでしょう。

この値が徐々に高まる場合は、アプリケーションがインデックスを効率的に使用していないことが考えられます。これは、生産規模のデータベース上でアプリケーション プロシージャのテストを行うことによりチェックできます。

¥SQLServer:Access Methods¥Index Searches/sec

:

説明 : インデックス検索数を表します。インデックス検索は、範囲スキャン、単一インデックス レコードのフェッチを開始するとき、およびインデックスの中で再度位置づけするときに使用します。 このカウンタは、単一行または小さな数値にインデックスを検索した秒あたりの回数を示します。このカウンタによって、システムのデータ アクセスのパターンをチェックできます。

¥SQLServer:SQL Statistics¥SQL Re-Compilations/sec

:

説明 : Query re-compilation クエリの再コンパイル処理は、スキーマの変更、テーブルに多くの行数を加えるまたはテーブルから差し引くなどの静的なスキーマの変更、またはセッション設定の変更によって発生します。このカウンタの値が常に高い場合は、調査が必要です。

¥SQLServer:Locks(_Total)¥Average Wait Time (ms)

:

説明 :待ち状態の原因となる各ロック要求の平均待ち時間をミリ秒単位で表します。

¥SQLServer:Locks(_Total)¥Lock Waits/sec

:

説明 :すぐには処理されず、呼び出し側がロック権限を与えられるまで待機しなければならないロック要求の数を表します。

¥SQLServer:Locks(_Total)¥Number of Deadlocks/sec

:

説明 :デッドロックの原因となるロック要求の数を表します。

¥SQLServer:Cache Manager(Prepared Sql Plans)¥Cache Hit Ratio

: 100% に近いほど適正です。

説明 :キャッシュ ヒット およびルックアップの割合を表します。このカウンタによって、アプリケーションが使用したコンパイルされたストアド プロシージャの数をチェックできます。このカウンタ値が小さすぎる場合は、動的 SQL ステートメントの使用が超過状態にあります。