^mgstat を使用したパフォーマンスの監視
この章では、基本的なパフォーマンス・データを収集するためのツール、^mgstat ユーティリティについて説明します。
^mgstat は %SYS ネームスペースから呼び出す必要があり、以下の位置を示す引数を使用できます。
引数 |
説明 |
sample time |
この引数は、カウンタのサンプリング周期 (秒単位) を指定します。指定されていない場合、既定は 2 秒です。
Note:
sample time に 10 秒を超える値が指定されている場合、^mgstat により 10 秒に引き下げられます。この表の number of samples 引数も参照してください。
|
number of samples |
この引数は、取得するサンプルの最大数を指定します。指定されていない場合、既定は 10 回の反復です。
Note:
^mgstat により sample time が引き下げられた場合は、いずれの引数も変更されていないときと実行時間 (sample time * number of samples) が事実上同じになるように、指定されている number of samples が引き上げられます。
|
filename |
この引数は、^mgstat で生成される .mgst ファイルの install-dir\mgr を基準としたファイル名を指定します。指定されていない場合、既定のファイル名は ServerName_InstanceName_Date_Time.mgst です。 |
page length |
^mgstat を対話的に実行する場合、この引数にはヘッダ行が繰り返されるまでに表示する行数を指定します。既定値は 0 で、ヘッダはページの最初に一度だけ表示されます。5 行未満の値 (0 以外) を指定した場合、^mgstat は値を 5 に増やします。
Note:
^mgstat をバックグラウンド・ジョブとして実行する場合、この引数は無視されます。
|
例えば、^mgstat をバックグラウンド・ジョブとして実行する場合、17,280 個のファイル・サンプルが収集されるまで、5 秒おきにサンプルを取得するように指定するには、(ターミナルを使用して、%SYS ネームスペースから) 以下のように入力します。
%SYS>JOB ^mgstat(5,17280)
また、^mgstat を対話的に実行して同様のサンプリングを指定し、データが 10 行出力されるたびにヘッダが表示されるようにするには、以下のように入力します。
%SYS>DO ^mgstat(5,17280,,10)
既定では、^mgstat は server name、configuration name、および date and time に基づいてファイル名を生成します。拡張子は “mgst” です。この拡張子は、Microsoft Excel で記述された、データのグラフ化を支援するアナライザ・ツールにより認識されます。既定では、このファイルは InterSystems IRIS® Data Platform インスタンスの install-dir\mgr ディレクトリに格納されます。ただし、^SystemPerformance ユーティリティを使用して出力ディレクトリが変更されている場合 (このドキュメントの “^SystemPerformance を使用したパフォーマンスの監視” の章にある "出力ディレクトリの変更" を参照)、^mgstat はその出力ディレクトリを使用します。
Note:
mgst ファイルは、^SystemPerformance ユーティリティを実行した場合にも生成され、HTML パフォーマンス・レポートに含められます (このドキュメントの “^SystemPerformance を使用したパフォーマンスの監視” の章を参照)。
システムのパフォーマンスに対する影響を最小限に抑えるために、^mgstat ユーティリティは共有メモリからさまざまなカウンタ情報を抽出します。このユーティリティを実行中にパフォーマンスの問題の発生が明らかになった場合には、データを使用して問題の調査を実施できます。分析を行う場合は、インターシステムズのサポート窓口Opens in a new tabにご相談ください。^mgstat の実行とファイルの削除の両方を自動化するタスクが用意されています。
報告されたデータの大半は、後述のテーブルに注記されているものを除き、1 秒単位の値に平均化されます。生成された出力ファイルは、Microsoft Excel などのスプレッドシート・ツールでより簡単に解釈することが可能で読みやすいコンマ区切り値 (CSV) 形式をとります。ファイルの最初の行はヘッダ行で、ファイル名とユーティリティのバージョンが記載されています。また、バッファの割り当てや監視対象の製品のバージョンに関する情報もあります。データの列数は、製品のバージョンによって異なりますが、先頭の 2 列は日付と時刻で、残りの列は以下のとおりです。
列名 |
説明 |
留意事項 |
Glorefs |
グローバル参照 (データベース・アクセス)。
現在のワークロードに対して発生する処理の量を示します。グローバル参照は CPU 時間を消費しますが、バッファ・プールがあるので、必ずしも物理的な読み取りを要するわけではありません。 |
|
RemGrefs * |
リモート・グローバル参照 (データベース・アクセス)。
分散キャッシュ・クラスタ・アプリケーション・サーバの代わりに生成されるグローバル参照の数を示します。 |
|
GRratio |
リモート・グローバル参照に対するグローバル参照の割合。 |
|
PhyRds |
ディスクからの物理的な読み取り。
物理的な読み取りの回数が多い場合、パフォーマンスの問題が発生することがあります。その場合は、データベース (グローバル) のバッファの数を増やすことでパフォーマンスを向上させることができます。 |
|
Rdratio |
論理ブロック読み取りと物理ブロック読み取りの比率。ただし、物理ブロック読み取りがゼロの場合は、ゼロになります。 |
|
Gloupds |
グローバル更新 (set または kill)。 |
|
RemGupds * |
リモート・グローバル更新。 |
|
Rourefs |
ルーチン参照 (tag^routine など)。 |
|
RemRrefs * |
リモート・ルーチン参照。 |
|
RouLaS |
ルーチンのロード、および保存 (ディスクからのフェッチまたはディスクへの保存)。
ルーチンのロードや保存の回数が多い場合、パフォーマンスの問題が発生することがあります。その場合はルーチン・バッファの数を増やすことでパフォーマンスを向上できます。 |
|
RemRLaS * |
リモートでのルーチンのロードと保存。 |
|
PhyWrs |
ディスクへの物理書き込み。 |
|
WDQsz |
ライト・デーモン・キューのサイズ (ブロック単位)。 |
単位は秒ではありません。 |
WDtmpq |
IRISTEMP 内の更新されたブロック。 |
単位は秒ではありません。 |
WDphase |
ライト・デーモンのフェーズ。
最も一般的なフェーズは以下のとおりです。
-
0: アイドル状態です (WD は実行されていません)。
-
5: WD はライト・イメージ・ジャーナル (WIJ) ファイルを更新しています。
-
7: WD は WIJ とジャーナルをコミットしています。
-
8: データベースを更新しています。
|
単位は秒ではありません。 |
Wijwri |
WIJ に書き込まれた 256KB ブロックの数。
WD が WIJ にデータを書き込み中のときは、この値は 0 以外になります。 |
|
RouCMs |
ルーチン・キャッシュ・ミスの回数。 |
|
Jrnwrts |
ジャーナルに書き込まれたブロックの数。 |
|
GblSz |
グローバル・リソース上の Seize の数。この章の “Seize、ASeize、および NSeize に関する注意事項” を参照してください。 |
|
pGblNsz |
グローバル・リソース上の NSeize の割合。この章の “Seize、ASeize、および NSeize に関する注意事項” を参照してください。 |
|
pGblAsz |
グローバル・リソース上の ASeizes の割合。この章の “Seize、ASeize、および NSeize に関する注意事項” を参照してください。 |
|
RouSz |
ルーチン・リソース上の Seize の数。この章の “Seize、ASeize、および NSeize に関する注意事項” を参照してください。 |
|
pRouAsz |
ルーチン・リソース上の ASeizes の割合。この章の “Seize、ASeize、および NSeize に関する注意事項” を参照してください。 |
|
ObjSz |
オブジェクト・リソース上の Seize の数。この章の “Seize、ASeize、および NSeize に関する注意事項” を参照してください。 |
|
pObjAsz |
オブジェクト・リソース上の ASeizes の割合。この章の “Seize、ASeize、および NSeize に関する注意事項” を参照してください。 |
|
ActECP * |
アクティブな ECP 接続の数。 |
単位は秒ではありません。 |
Addblk * |
ECP クライアントのキャッシュに追加されたブロックの数。 |
|
PrgBufL * |
ECP クライアントにおけるグローバル・バッファの不足のために ECP クライアントのキャッシュから削除されたブロックの数。
この数が多い場合、ECP クライアントでパフォーマンスの問題が発生することがあります。その場合は、ECP クライアントのグローバル・バッファの数を増やすことでパフォーマンスを向上できます。 |
|
PrgSrvR * |
ECP サーバにより ECP クライアントのキャッシュから削除されたブロックの数。 |
|
BytSnt * |
ECP クライアントとして送信したバイト数 |
|
BytRcd * |
ECP クライアントとして受信したバイト数。 |
|
WDPass |
起動以降の WD サイクル。 |
単位は秒ではありません。 |
IJUCnt |
このサイクルを継続するために WD が待機しているジョブの数。 |
単位は秒ではありません。 |
IJULock |
IJULock フラグが設定されているかどうかを示します。
IJULock が設定されている場合、WD の書き込みサイクルが終了するまですべての更新がロックされます。 |
単位は秒ではありません。 |
PPGrefs |
すべてのプロセス・プライベート・グローバル・アクセスのカウント。 |
|
PPGupds |
すべてのプロセス・プライベート・グローバル更新のカウント。 |
|
* ECP 構成を使用していない場合は、0 が表示されます。
Seize、ASeize、および NSeize に関する注意事項
他のプロセスの干渉を受けずに更新が実行されるようにするため、指定されたリソースに対してジョブが排他的にアクセスする必要がある場合には Seize が発生します。所定の Seize が即座に満たされない場合は、満たされるまで更新が延期されます。
シングル CPU システムの場合、このプロセスは直ちに休止状態になります (リソースを保持しているプロセスがその更新を完了してリソースを解放するまでは何もできないためです)。
マルチ CPU システムの場合、プロセスは妥当な時間内にリソースを取得することを “見込んで” 保留ループに入ることで、休止状態による負荷の発生を回避します。保留ループ中にプロセスがリソースにアクセス可能になった場合は、直ちにループが終了し、プロセスの更新が続行されます。更新が終了すると、プロセスはそのリソースを待機している可能性のある他のプロセスにリソースを解放します。これが Aseize です。保留ループの最後でリソースが別のプロセスによって保持されている場合、プロセスは実行されず、リソースが解放されるまで引き続き休止状態のまま待機します。これが Nseize です。
シングル CPU システムで複数プロセスが実行されるときには Nseize のような状況が当然生じ、マルチ CPU システムで複数プロセスが実行されるときには Aseize のような状況が当然生じます。この 2 つの違いは、Nseize では、実行中のプロセスのコンテキストをオペレーティング・システムが変更する必要があることから、CPU のシステム時間または特権時間が発生するのに対し、Aseize では、リソースが解放され確保されるまで、あるいは中断して休止状態になるまで継続して CPU が実行されるため、CPU のユーザ時間が発生する点です。一般的に、マルチ CPU システムでは、コンテキスト・スイッチを実行するほうが、そうした操作を回避するために数回ループするよりもオペレーティング・システムの負荷が高くなります。これは、マルチ CPU システム上でのコンテキスト・スイッチに付随して CPU のオーバーヘッドやメモリの遅延が発生することに起因します。