Essbaseキャッシュおよび計算パフォーマンス
計算パフォーマンス(特に大規模な計算)を最適化するために、Essbaseはキャッシュを使用してメモリー使用量を調整します。計算機のキャッシュ(使用されている場合)が計算を最適化するのに十分な大きさであることを確認します。インデックス・キャッシュ、データ・キャッシュ、動的計算機キャッシュおよびアプリケーション・キャッシュがどのように関連しているかを確認します。
キューブの計算時には、Essbaseではアウトライン内のメンバー当たり約30バイトのメモリーが使用されます。そのため、キューブに5,000のメンバーがある場合は、Essbaseではキューブの計算に約150 KBのメモリーが必要になります。
ノート:
計算スクリプトを組み合せることで、余分なメモリーの使用を回避できます。また、単一の計算スクリプトで並列計算を使用することで、パフォーマンスを向上させることができます。「並列計算の使用」を参照してください。
Essbaseでは、計算パフォーマンス(特に大規模な計算)を最適化するために、メモリーが使用されます。キューブ・アウトラインのサイズを変更する場合を除き、使用されるメモリーの量は制御できません。ただし、メモリー・キャッシュのサイズによってEssbaseでの計算を最適化できます。
Essbaseでは、次のキャッシュを使用して、メモリーの使用率を調整します:
-
計算機キャッシュ。
初めてキューブを計算するときに、計算パフォーマンスのために重要なものは、計算機キャッシュのサイズです。可能であれば、計算機キャッシュを、Essbaseで最適な計算機キャッシュ・オプションを使用するために十分な大きさにしてください。
「計算機キャッシュのサイズ設定」を参照してください。
-
動的計算機キャッシュ。「動的計算機キャッシュのサイズ設定」を参照してください。
-
インデックス・キャッシュ。キューブが大規模な場合は、デフォルトのインデックス・キャッシュでは十分でないため、最適な計算パフォーマンスが得られません。INDEXCACHESIZEアプリケーション構成プロパティを参照するか、MaxL alter database set index_cache_sizeを参照してください。
-
データ・キャッシュ。DATACACHESIZEアプリケーション構成プロパティを参照するか、MaxL alter database set data_cache_sizeを参照してください。
-
データ・ファイル・キャッシュ。
-
アプリケーション・キャッシュ。ハイブリッド・モードがブロック・ストレージ・キューブで使用されている場合は、アプリケーション・キャッシュが取得のメモリー使用率の管理に役立ちます。アプリケーション・キャッシュは集約ストレージ・キャッシュに似ています。詳細は、「集約ストレージ・キャッシュ」を参照してください。
計算機キャッシュのサイズ設定
Essbase計算機キャッシュの最適なサイズを使用する場合、これはアウトライン内の疎ディメンションの数と密度によって異なります。計算機キャッシュ・ビットマップを理解すると、計算機キャッシュのサイズを最適化できます。
ブロック管理を最適化するために、Essbaseでは、計算時にデータ・ブロックを記録および追跡するために、そのサイズが計算機キャッシュのサイズによって制御されるビットマップを作成できます。ビットマップは、ディスクI/Oよりも高速なEssbaseの取得方法です。特に、キューブを初めて計算する場合や、疎データを使用してキューブを計算する場合です。
データベースに2つ以上の疎ディメンションがあり、次らの条件のいずれかも満たされている場合、Essbaseは計算機キャッシュ・ビットマップを使用します:
-
少なくとも1つの完全疎ディメンションを計算します。
-
計算スクリプトでSET CACHE ALLコマンドを指定します。
計算機キャッシュ・ビットマップについて
計算機キャッシュの場合、Essbaseは疎ディメンションを2つのグループに分離します:
-
ビットマップ・ディメンション: ビットマップがいっぱいになるまでEssbaseがビットマップに収める疎ディメンション。ビットマップに配置された疎ディメンションの各メンバーの組合せは、1ビットのメモリーを占有します。ビットマップに配置するには、疎ディメンションのすべてのメンバー組合せのビットマップに十分な領域が必要です。
-
アンカー・ディメンション: ビットマップに収まらない、データベース・アウトライン内の残りの1つ以上の疎ディメンション。
Essbaseは、アウトラインの最初の疎ディメンションから開始し、ビットマップにできるだけ多くのディメンションを収めます。収めるディメンションはビットマップ・ディメンションです。計算機キャッシュはビットマップのサイズを制御するため、収めることができる疎ディメンションの数は計算機キャッシュのサイズによって異なります。
残りの疎ディメンションはアンカー・ディメンションです。アンカー・ディメンションの場合、Essbaseはビットマップを使用してブロックが存在するかどうかを判断できません。
どのディメンションがアンカー・ディメンションで、どのディメンションがビットマップ・ディメンションであるかを確認するには、SET MSG DETAIL計算コマンドを使用して、アプリケーション・ログにビットマップ情報を表示します。
できるだけ多くのディメンションをビットマップに配置できるように、アウトライン内の疎ディメンションを慎重に順序付けします。メンバーが最も少ないディメンションから開始し、メンバーが最も多いディメンションが最後になるまで続行します。この順序により、ビットマップに収まるディメンションが増え、計算パフォーマンスが向上します。
ノート:
アウトライン内の疎ディメンションの順序は、問合せのパフォーマンスにも影響します。「パフォーマンスを最適化するためのアウトラインの設計」を参照してください。
Essbaseでは、複数のアンカー・ディメンションがある場合(または、計算機キャッシュが複数のビットマップをサポートするのに十分な大きさでない場合)、1つのビットマップが使用され、アンカー・ディメンションが1つある場合は複数のビットマップが使用されます。1つのビットマップは最小のメモリーを使用しますが、複数のビットマップより効率が低くなります。
複数のビットマップではより多くのメモリーが使用されますが、1つのビットマップを使用するよりも高速です。子ブロックを追跡するビットマップがあれば、親ブロックを追跡するビットマップもあります。データベースを初めて計算する場合、特にパフォーマンスが向上します。
使用されるビットマップの数は、アンカー・ディメンション内のメンバーに対する依存する親の最大数によって決まります。メンバーには、共有メンバーがないかぎり、1つの依存する親があります。たとえば、Sample.BasicデータベースのProductディメンションについて考えてみます。メンバーCola (100-10)には、1つの親Colas (100)があります。ただし、Diet Cola (100-20)には、Diet Drinks (Diet)とColas (100)の2つの親があります。依存する親が2つを超えるProductのメンバーはありません。したがって、Productがアンカー・ディメンションの場合、依存する親は最大2です。
Essbaseでは、次の表に示すように、次の3つのオプションのいずれかが計算用に選択されます:
表34-2 計算機のキャッシュ・オプション
オプション | 方法 | パフォーマンス評価 |
---|---|---|
1 |
単一のアンカー・ディメンション、複数のビットマップ |
1 |
2 |
単一のアンカー・ディメンション、単一のビットマップ |
2 |
3 |
複数のアンカー・ディメンション、単一のビットマップ |
3 |
Essbaseは、計算機キャッシュのサイズに基づいて、計算に最適なパフォーマンス・メソッドを選択します。計算機キャッシュ・サイズが前述のいずれかのオプションに対して小さすぎる場合、Essbaseは計算機キャッシュを使用しません。計算のパフォーマンスが著しく低下する可能性があります。
並列計算を有効にすると、使用する計算機キャッシュ・オプションが変更される場合があります。「CALCPARALLEL並列計算と他のEssbase機能との関係」を参照してください。
注意:
データベースを初めて計算する場合、計算のパフォーマンスに特に重要なのは計算機キャッシュのサイズです。可能であれば、計算機キャッシュを、Essbaseで最適な計算機キャッシュ・オプションを使用するために十分な大きさにしてください。
計算機キャッシュ・サイズの決定
計算機キャッシュの最適なサイズは、システムが使用可能なメモリー、およびキューブの性質と構成によって異なります。
次の式を使用して、Essbaseで前述の「計算機のキャッシュ・オプション」表の3つのオプションそれぞれを選択するために必要な計算機キャッシュ・サイズを計算します:
Calculator cache = Bitmap size in bytes * Number of bitmaps
要素の説明
Bitmap size in bytes = Max ((member combinations on the bitmap dimensions / 8), 4)
説明
Number of bitmaps = Maximum number of dependent parents in the anchoring dimension + 2 constant bitmaps
ノート:
最小ビットマップのサイズは4バイトです。(ビットマップ・ディメンションのメンバーの組合せ/8)が4バイト未満の場合、Essbaseでは4バイトのビットマップ・サイズが使用されます。
5つの疎ディメンション(S1からS5)があるサンプル・キューブについて考えてみます:
表34-3 例: 5つの疎ディメンションがあるサンプルのキューブ
疎ディメンション | メンバーの数 | 依存する親 |
---|---|---|
S1 |
20 |
該当なし |
S2 |
20 |
該当なし |
S3 |
50 |
該当なし |
S4 |
50 |
該当なし |
S5 |
200 |
3 |
このサンプル・キューブは、次の計算例に使用します:
- オプション1: 単一のアンカー・ディメンション、複数のビットマップ
- オプション2: 単一のアンカー・ディメンション、単一のビットマップ
- オプション3: 複数のアンカー・ディメンション、単一のビットマップ
オプション1: 単一のアンカー・ディメンション、複数のビットマップ
この計算例では、データベースに関する次の点を想定します:
-
ビットマップ・ディメンション: S1、S2、S3、S4
-
アンカー・ディメンション: S5
-
アンカー・ディメンションの依存する親: 3
次の計算を実行します:
Bitmap size in bytes = (S1 * S2 * S3 * S4) / 8
= (20 * 20 * 50 * 50) / 8
= 125,000 bytes
Number of bitmaps = Maximum number of dependent parents in the anchoring dimension
= +
= 2 constant bitmaps
= 3 + 2
= 5
Calculator cache = Bitmap size * Number of bitmaps
= 125,000 * 5
= 625,000 bytes
1つのアンカー・ディメンションを含むこのデータベースに複数のビットマップを使用するEssbaseの場合、計算機キャッシュは625,000バイトである必要があります。
オプション2: 単一のアンカー・ディメンション、単一のビットマップ
この計算例では、データベースに関する次の点を想定します:
-
ビットマップ・ディメンション: S1、S2、S3、S4
-
アンカー・ディメンション: S5
-
アンカー・ディメンションの依存する親: 該当なし
次の計算を実行します:
Bitmap size in bytes = (S1 * S2 * S3 * S4) / 8
= (20 * 20 * 50 * 50) / 8
= 125,000 bytes
Number of bitmaps = Single bitmap
= 1
Calculator cache = Bitmap size * Number of bitmaps
= 125,000 * 1
= 125,000 bytes
1つのアンカー・ディメンションを含むこのデータベースに1つのビットマップを使用するEssbaseの場合、計算機キャッシュは125,000バイトである必要があります。
オプション3: 複数のアンカー・ディメンション、単一のビットマップ
この計算例では、データベースに関する次の点を想定します:
-
ビットマップ・ディメンション: S1、S2、S3
-
アンカー・ディメンション: S4、S5
-
アンカー・ディメンションの依存する親: 該当なし
次の計算を実行します:
次の計算を実行します:
Bitmap size in bytes = (S1 * S2 * S3) / 8
= (20 * 20 * 50) / 8
= 2,500 bytes
Number of bitmaps = Single bitmap
= 1
Calculator cache = Bitmap size * Number of bitmaps
= 2,500 * 1
= 2,500 bytes
複数のアンカー・ディメンションを含むこのデータベースに1つのビットマップを使用するEssbaseの場合、計算機キャッシュは2,500バイトである必要があります。
次の表に、指定した計算機キャッシュ・サイズに応じて、Essbaseで使用される計算機キャッシュ・オプションを示します:
表34-4 計算機キャッシュ・サイズに基づく計算機キャッシュ・オプションの選択
指定された最小サイズ | 選択されたオプション |
---|---|
625,000バイト |
オプション1 (最適なパフォーマンスを提供) |
125,000バイト |
オプション2 |
2,500バイト脚注1 |
オプション3 |
脚注1
計算機キャッシュ・サイズを2,500バイト未満に指定した場合、Essbaseは計算時に計算機キャッシュを使用しません。計算のパフォーマンスが著しく低下する可能性があります。
計算スクリプトでSET MSG SUMMARYコマンドを使用して、Essbaseで使用できる計算機キャッシュ・オプションを確認できます。空のキューブで次の計算スクリプトを実行します:
SET MSG SUMMARY;
CALC ALL;
Essbaseは、アプリケーション・ログに計算機キャッシュ設定を表示します。「計算テストおよび統計のSETコマンド」を参照してください。
指定できる計算機の最大キャッシュ・サイズは200,000,000バイトです。デフォルトは200,000バイトです。選択する計算機キャッシュのサイズは、使用可能なメモリーとキューブの構成によって異なります。
ノート:
計算機、索引、データ・ファイルおよびデータ・キャッシュのサイズは、通常、集約に基づく計算が多く、式の計算に基づく計算が少ない場合、パフォーマンスに大きく影響します。
キューブを初めて計算する場合、計算機キャッシュのサイズは特に重要です。可能な場合は、計算機キャッシュを、Essbaseでオプション1を使用するために十分な大きさにしてください。
デフォルトの計算機キャッシュ・サイズを使用するか、計算スクリプト内で計算機キャッシュのサイズを設定できます。計算スクリプトからサイズを設定した場合、この設定は計算スクリプトの期間中のみ使用されます。計算スクリプトのSET CACHEコマンドおよびCALCCACHE構成設定を参照してください。
動的計算機キャッシュのサイズ設定
開いているキューブごとに、Essbaseはデータ・ブロックの動的計算機キャッシュに領域を割り当てます。動的計算機キャッシュが効果的に使用されているかどうかを判断するには、アプリケーション・ログおよび構成設定を確認します。
動的計算機キャッシュの使用状況の確認
DYNCALCCACHEMAXSIZE構成設定は、Essbaseサーバー上の各動的計算機キャッシュの最大サイズを指定します。デフォルトでは、サイズは20MBに設定されます。Essbaseは、DYNCALCACHEMAXSIZE設定で指定された最大メモリー領域が割り当てられるまで、動的計算機キャッシュ内の領域をデータ・ブロックに割り当てます。
Essbaseでは、データの取得ごとに2つのメッセージがアプリケーション・ログに書き込まれます。次の例(一部省略)では、最初のメッセージは取得に必要な合計時間を示しています:
[2024-07-27T16:43:52.707+00:00] ... [EXEC_TIME: 0.53] Regular extractor completed successfully
[2024-07-27T16:43:52.707+00:00] ... Regular Extractor Big Block Allocs -- Dyn.Calc.Cache : [30] non-Dyn.Calc.Cache : [0]
動的計算機キャッシュを使用している場合は、2つ目のメッセージに、データ計算機キャッシュ内で計算されたブロックの数(Dyn.Calc.Cache: [n])、および動的計算機キャッシュの外部のメモリーで計算されたブロックの数(non-Dyn.Calc.Cache: [n])が示されます。
動的計算機キャッシュが効果的に使用されているかどうかを判断するために、両方のメッセージを確認して、構成設定を検討します。たとえば、ブロックが動的計算機キャッシュの外部および内部で計算されたことがメッセージに示されている場合は、DYNCALCCACHEMAXSIZE設定を増やすことができます。
指定した最大サイズが許容できるすべてであり、計算機キャッシュ外のメモリーを使用して動的に計算された取得を完了すると、許容できない遅延が発生する場合は、DYNCALCCACHEWAITFORBLKをTRUEに設定します。
MaxLのquery database文をperformance statistics構文で使用して、動的計算機キャッシュのアクティビティの要約を表示できます。
動的計算機キャッシュ・サイズの変更
動的計算機キャッシュに関連する5つの構成設定があります。これらの設定の最適値は、Essbaseサーバー・マシンのメモリー、Essbaseデータベースの構成、およびユーザー問合せの性質によって異なります。
各構成設定の次の説明には、システムの値を決定する方法に関する推奨事項が含まれています。サイト固有の要件にあわせるには、設定をテストおよび調整することが必要になる場合があります。
-
DYNCALCCACHEMAXSIZE: この設定は、Essbaseが各動的計算機キャッシュに割り当てることができる最大サイズを指定します。
推奨設定値 = C * S * U。
-
Cは、1つのブロックの計算時にEssbaseで修正(アドレス可能性を取得)する必要があるブロックの最大数です。通常、値100はこの値の近似値です。式計算で多数の子を集計する場合、この数値を大きくすることができます。
-
Sは、Essbaseサーバー・マシン上のすべてのデータベースで最大の拡張ブロックのサイズです。拡張されたブロック・サイズを計算するには、各密ディメンションのメンバー数(動的計算メンバーおよび動的時系列メンバーを含む)を、ブロック内のセル数に対して乗算し、セルの数に各メンバー・セルのサイズ(8バイト)を乗算します。
たとえば、Sample.Basicの密ディメンションのメンバー数について考えてみます(ラベルのみのメンバーはカウントされません):
-
19 (Year、HTDおよびQTDを含む12の保管済メンバーと7の動的計算メンバーを含む)
-
14 (Measures、8つの保管済メンバーと6つの動的計算メンバーを含む)
-
4 (Scenario、2つの保管済メンバーと2つの動的計算メンバーを含む)
S = 19 * 14 * 4セル(8バイト/セル) = 8512バイト/ブロック
この番号は、論理ブロック・サイズとしてアプリケーション・ログに表示されます。
-
-
Uは、同時ユーザー数が最も多いデータベースで予想される同時ユーザーの最大数です。
DYNCALCACHEMAXSIZEに値0 (ゼロ)を割り当てると、Essbaseで動的計算機キャッシュを使用しないように指示されます。
デフォルトでは、この値のサイズは20MB (20,971,520バイト)です。
-
-
DYNCALCCACHEWAITFORBLK: Essbaseが動的計算機キャッシュに割り当てられたすべての領域を使用する場合、この設定は、キャッシュで領域が使用可能になるまで待機するか、キャッシュ外のメモリー内のブロックをすぐに書込みおよび計算するかをEssbaseに指示します。キャッシュが小さすぎる場合は、複数のスレッドがキューに入っている可能性があります。
推奨設定値 = FALSE (デフォルト値)。
TRUEに設定する前に、次の代替方法を試してください:
-
サーバー・マシンに物理メモリーを追加します
-
動的計算機キャッシュにこれ以上メモリーを使用できないことを確認するまで、DYNCALCCACHEMAXSIZEの値を増やし、テストして繰り返します。
-
-
DYNCALCCACHEBLKTIMEOUT: Essbaseが動的計算機キャッシュの使用可能な領域を待機する場合、この設定は待機時間を定義します。
推奨設定値 = WT / B。
-
WTは、問合せの最大許容待機時間(5秒など)です。
-
Bは、最大の問合せでアクセスされた論理ブロックの合計数です。
Bの値を確認するには、アプリケーション・ログのメッセージで、問合せのDyn.Calc.Cache "Big Block Allocs"の最大数を確認します。
-
-
DYNCALCCACHEBLKRELEASE: Essbaseが指定された時間を待機しており、動的計算機キャッシュでまだ領域が使用できない場合、この設定は、動的計算機キャッシュのすぐ外でブロックを書き込んで計算するか、ブロックをスワップ・アウトしてバッファ内のスワップされたブロックを一時的に圧縮して領域を作成するかをEssbaseに指示します。
推奨設定値 = FALSE (デフォルト値)。
重大なメモリー不足の問題が発生している場合にのみTRUEに設定します。
-
DYNCALCCACHECOMPRBLKBUFSIZE: Essbaseが指定された待機時間を待機しており、DYNCALCCACHEBLKRELEASE設定がTRUEの場合、この設定は動的計算機キャッシュ圧縮ブロック・バッファのサイズです。
推奨設定値 = (C * S) / 2
ここで、Cは、1つのブロックの計算時にEssbaseで修正(アドレス可能性を取得)する必要があるブロックの最大数で、Sはマシン上のすべてのデータベース間で最大の拡張ブロックのサイズです。説明どおりにCとSを計算するか、DYNCALCCACHEMAXSIZE設定を計算します。