MaxLのパフォーマンス統計

MaxL文は、Essbaseパフォーマンス統計を収集および分析するために役立ちます。パフォーマンス統計は、データベースが良好な状態で実行されているか、またはパフォーマンスを改善するための変更が必要かを把握するために役立ちます。

パフォーマンス統計について

query databaseにより、データベースとアプリケーションについて中期および長期のパフォーマンス統計が返されます。統計は、MaxL出力で表として表示されます。パフォーマンス統計を収集するには、まずalter database <dbs-name> set performance statistics enabledを使用して統計収集を有効にする必要があります。また、alter databaseを使用して、統計のパーシスタンス(長さ)とスコープ(粒度)をゼロに戻すこともできます。

query databaseの出力は、システムで行われた処理、統計の収集期間および収集された統計のパーシスタンス・レベルによって異なることがあります。この表は、統計の一般的なセットに関する情報を提供します。2つの類似した更新の後、または2つの再構築操作の後など、サーバーの処理において類似したポイントで収集された統計の2つのセットを比較するために役立ちます。統計は間隔を開けて収集するようにし、それぞれを比較して違いを特定します。システムに変更が加えられた前後や、システム・パフォーマンスに変化が見られた場合に、収集された統計を比較します。

ノート:

実行する計算によっては、出力ログに表示される表と表示されない表があります。

カーネル入力/出力統計

カーネルI/O統計表はアプリケーション全体の入力/出力の概要を示します。

アプリケーションごとに1つのカーネルI/O統計表があります。

この表のパーシスタンス/スコープ: med/server

表3-4 カーネルIO統計

カーネルI/O 読取り(OSがディスクから読取り) 書込み(OSがディスクに書込み)
# Index インデックス・キャッシュを通じて発生した読取りI/O数。 インデックス・キャッシュを通じて発生した書込み数。
# Data I/O データ・キャッシュを通じて発生した読取り数。 データ・キャッシュを通じて発生した書込み数。
# Fground I/O (プロセスがデータの読取りを待機している間に)フォアグラウンドで発生したデータ読取り数。 (プロセスがデータ書込みを待機している間に)フォアグラウンドで発生したデータ書込み数。
# Index bytes .INDファイルから読み取られたバイト数。 .INDファイルに書き込まれたバイト数。
# Data bytes .PAGファイルから読み取られたバイト数。 .PAGファイルに書き込まれたバイト数。
Av byte/dat I/O データ読取りの平均バイト・サイズ。大きい値をお薦めします。 データ書込みの平均バイト・サイズ。大きい値をお薦めします。

カーネル・キャッシュ統計

カーネル・キャッシュ統計表は、Essbaseキャッシュのサイズを設定する方法を決めるために役立ちます。

最適なパフォーマンスに必要な分だけキャッシュを大きくします。キャッシュ・サイズは、インデックス、データ・ファイル、データと、重要度順にリストされていることに注意します。

  • インデックス・キャッシュは、インデックス・ページを保持するメモリー内のバッファです。

  • データ・ファイル・キャッシュは、圧縮済データ・ブロックを保持するために設計された、物理データ・キャッシュ層です。

  • データ・キャッシュは、データ・ページを保持するメモリー内のバッファです。

Essbaseカーネルは、キャッシュを使用してメモリーを管理します。原則として、プロセスに役立つデータは、ディスク上ではなくメモリー内に保持されます。プロセスに必要な何かがディスクからキャッシュに移動され、その余地を作るためにキャッシュ内の何かが破棄されるときに置換が発生します。

キャッシュはできるだけ小さくしますが、キャッシュの置換が0より大きい場合はキャッシュが小さすぎる可能性があります。インデックス・キャッシュの適切なサイズ設定は、最適なパフォーマンスのために最も重要で、データ・キャッシュのサイズ設定の重要度が最も低くなります。

この表のパーシスタンス/スコープ: long/db

表3-5 カーネル・キャッシュ統計

カーネル・キャッシュ統計 説明
# Blocks インデックス・キャッシュ、データ・ファイル・キャッシュおよびデータ・キャッシュ内の実際のブロック数。ブロック・サイズをブロック数に乗算すると、使用するキャッシュ・メモリーの量に等しくなります。この数を、データベースのサイズ設定に最初に使用したブロックの概算と比較します。
# Replacements キャッシュ当たりの置換数。データがディスクからキャッシュに移動し、その余地を作るためにキャッシュ内の何かが削除されると置換が発生します。置換の数が少ないかゼロの場合は、キャッシュの設定が大きすぎる可能性があります。
# Dirty repl キャッシュ当たりのダーティ置換の数。ダーティ置換では、プロセスでキャッシュ・メモリーが再利用できるようになる前にディスクへの書込みが必要です。プロセスに必要なデータがダーティなのは、メモリー内で変更されてもディスクに保存されていないためです。ダーティ置換は非効率的で高コストです。これは、キャッシュが小さすぎる可能性があることを示します。
Log blk xfer in データ・ファイル・キャッシュおよびデータ・キャッシュへの論理ブロック転送の数(この測定はインデックス・キャッシュには適用されません)。キャッシュ・サイズを変更している場合は、この統計を調査してデータ・トラフィックの変化を記録すると情報が得られる可能性があります。

キャッシュ・エンドトランザクション統計

キャッシュ・エンドトランザクション統計表では、DBWriterの効率性が測定されます。DBWriterは非同期(つまり待機なし)のEssbaseスレッドで、キャッシュを検索してディスクへの書き込みが必要な情報を検出します。

この表は、トランザクションの終了時のクリーン・アップ状態を示します。DBWriterはアイドル時間にのみ動作するため、そのアクティビティを測定すると、アイドル時間の長さを把握できます。この数字が大きい場合は、データベースを効率的にサポートするためにDBWriterに十分なアイドル時間があったことを示します。テクニカル・サポートに連絡する必要がある場合に備えて、診断のためにこの統計情報を使用できるようにしておきます。

この表のパーシスタンス/スコープ: med/db

データベースの同期入力/出力統計

データベースの同期I/O表は、同期入力/出力を追跡します。

同期とは、スレッドまたはプログラムが続行する前にI/Oの終了を待機することを意味します。Tave (ms)列は、帯域幅(バイト数/Ttotal)を示します。

この表のパーシスタンス/スコープ: med/db

表3-6 DBの同期IO統計

DataBaseの同期I/O Count Bytes Ttotal (ms) Tave (ms)

インデックス読取り

ディスクの.INDファイルからのOSのインデックス情報読取りの発生。

OSがディスクにアクセスし.INDファイルを読み取った回数。 .INDファイルからOSが読み取ったバイト数。 OSがインデックスの読取りを完了するのにかかった合計時間。 OSが1つのインデックス読取りを完了するのにかかった平均時間。これは、Ttotal (ms)/カウントと等しいです。

インデックス書込み

.INDファイルへのOSのインデックス情報書込みの発生。

OSが.INDファイルに情報を書き込んだ回数。 .INDファイルにOSが読み取ったバイト数。 OSがインデックスの書込みを完了するのにかかった合計時間。 OSが1つのインデックス書込みを完了するのにかかった平均時間。これは、Ttotal (ms)/カウントと等しいです。

データ読取り

ディスクの.PAGファイルからのOSの情報読取りの発生。

OSがディスクにアクセスして.PAGファイルを読み取った回数。 .PAGファイルからOSが読み取ったバイト数。 OSがデータ読取りを完了するのにかかった合計時間。 OSが1つのデータ読取りを完了するのにかかった平均時間。これは、Ttotal (ms)/カウントと等しいです。

データ書込み

.PAGファイルへのOSのデータ書込みの発生。

OSが.PAGファイルに情報を書き込んだ回数。 .PAGファイルにOSが読み取ったバイト数。 OSがデータ書込みを完了するのにかかった合計時間。 OSが1つのデータ書込みを完了するのにかかった平均時間。これは、Ttotal (ms)/カウントと等しいです。

ノート:

帯域幅 = バイト数/Ttotal。平均帯域幅 = バイト数/Tave。

データベースの非同期入力/出力統計

データベースの非同期I/O表では、非同期の入力/出力が追跡されます。

非同期とは待機がないことを意味します。プログラムが他の処理を実行している間に、I/Oが不明な時間に発生します。アプリケーションに有効な帯域幅は、バイト数/Twaitで決まります。

この表のパーシスタンス/スコープ: med/db

表3-7 DBの非同期IO統計

データベースの非同期I/O Count Bytes Ttotal (ms) Tave (ms) Twait (ms)

インデックス読取り

ディスクの.INDファイルからのOSのインデックス情報読取りの発生。

OSがディスクにアクセスし.INDファイルを読み取った回数。 .INDファイルからOSが読み取ったバイト数。 インデックス読取りの要求からその完了が確認されるまでの経過時間。 インデックス読取りの要求からその完了が確認されるまでの経過時間の平均。 ポーリング時点でOSがインデックスの読取りを完了していない場合の待機時間。

インデックス書込み

.INDファイルへのOSのインデックス情報書込みの発生。

OSが.INDファイルに情報を書き込んだ回数。 .INDファイルにOSが読み取ったバイト数。 インデックス書込みの要求からその完了が確認されるまでの経過時間。 インデックス書込みの要求からその完了が確認されるまでの経過時間の平均。 ポーリング時点でOSがインデックスの書込みを完了していない場合の待機時間。

データ読取り

ディスクの.PAGファイルからのOSの情報読取りの発生。

OSがディスクにアクセスして.PAGファイルを読み取った回数。 .PAGファイルからOSが読み取ったバイト数。 データ読取りの要求からその完了が確認されるまでの経過時間。 データ読取りの要求からその完了が確認されるまでの経過時間の平均。 ポーリング時点でOSがデータの読取りを完了していない場合の待機時間。

データ書込み

.PAGファイルへのOSのデータ書込みの発生。

OSが.PAGファイルに情報を書き込んだ回数。 .PAGファイルにOSが読み取ったバイト数。 データ書込みの要求からその完了が確認されるまでの経過時間。 データ書込みの要求からその完了が確認されるまでの経過時間の平均。 ポーリング時点でOSがデータ書込みを完了していない場合の待機時間。

ノート:

(1)非同期I/Oは、理想的には待機時間なしであり、不明なタイミングで発生するため、読取りや書込みが実際に完了するまでの期間を判断できません。(2)帯域幅(マイクロ秒当たりのバイト数)は決定できません。アプリケーションで確認されるように、効率的な帯域幅はバイト数/Twaitで決定されます。

動的計算のキャッシュ統計

動的計算のキャッシュ表は、計算済メンバー(BigBlks)を格納するように拡張されたブロックがどこで計算されるかを示します(動的計算キャッシュ(DCC)または通常のメモリー(nonDCC))。

割り当てられている大きいブロックの合計と、同時に保持される大きいブロックの最大数の比較を参照し、ブロック待機統計を分析することで、(DYNCALCCACHEMAXSIZEを含む)動的計算キャッシュの構成設定の効率性を判断できます。

表3-8 動的計算のキャッシュ統計

動的計算のキャッシュ統計 説明
BigBlks Alloced システムがどこでメモリーを取得したか(DCキャッシュまたは通常)に関係なく、ここまでにリクエストされた大きいブロックの割当て数。Q1、Q2およびQ3の3つの実行済問合せでは、それぞれ25、35および10個の大きいブロックが必要で、割当て済の大きいブロックは70個になります。これは、Q1が25個のブロックすべてを同時に必要としたということは意味しません。問合せが終了し、残りのブロックがすべて解放されてDCキャッシュまたは通常のメモリーに戻されるまで、しばらくの間はいくつかのブロックを使用し、その後一部を解放するなどした可能性もあります。
Max BigBlks Held ここまでに、同時に保持された大きいブロックの最大数。ここまでに実行された各問合せQiについて、問合せで同時に必要だった(DCCと通常のメモリー・ブロックの両方を含む)大きいブロックの最大数を提供する数値Niがあります。合計列の下にあるMaxBigBlksHeldは、Niの値すべてに対する最大です。DCC列と非DCC列の下にある値は、該当するメモリーの部分に保持される最大ブロックに自身を制限する点を除いて類似しています。
DCC Blks Waited システムが待機する必要があった動的計算機ブロックの数。
DCC Blks Timeout

動的計算機キャッシュの空きスペースを待機してEssbaseがタイムアウトした回数。

DCC Max ThdQLen

動的計算キャッシュ・メモリーが解放されるのをキューで待機したままになっていたスレッドの最大数。

MaxLスクリプトの例

次のMaxLスクリプトは、パフォーマンス統計表の出力ファイルを作成します。

/* to execute:
   essmsh scriptname username password
*/
login $1 $2;
spool on to 'c:\mxlouts\pstatsouts.txt';
alter database sample.basic set performance statistics enabled;
execute calculation 
  'SET MSG ERROR;
   CALC ALL;'
on Sample.basic;
alter database sample.basic set performance statistics mode to medium persistence server scope;
query database sample.basic get performance statistics kernel_io table;
alter database sample.basic set performance statistics mode to long persistence database scope;
query database sample.basic get performance statistics kernel_cache table;
alter database sample.basic set performance statistics mode to medium persistence database scope;
query database sample.basic get performance statistics end_transaction table;
query database sample.basic get performance statistics database_synch table;
query database sample.basic get performance statistics database_asynch table;
spool off;
logout;