この章の情報は、ブロック・ストレージ・データベースのみに適用され、集約ストレージ・データベースとは関係がありません。集約ストレージとブロック・ストレージの比較。も参照してください。
Essbaseでは、次の5つのメモリー・キャッシュを使用して、メモリーの使用率を調整します:
表 171. Essbaseキャッシュのリスト
Essbaseでは、それぞれのキャッシュにデフォルトのサイズが設定されています。各データベースの必要に応じてサイズを調整できます。適切なキャッシュ・サイズは、データベース・サイズ、ブロック・サイズ、インデックス・サイズおよびサーバーの使用可能メモリーなど、多くの要因の影響を受けます。キャッシュ・サイズの設定は、データベースやサーバーの全体的なパフォーマンスに大きく影響する可能性があります。
キャッシュ・サイズを設定する前に、キャッシュ・メモリーのロックを使用可能にするか、または設定を使用不可のままにしておく(デフォルト)必要があります。
キャッシュ・メモリーのロックを設定することによって、インデックス・キャッシュ、データ・ファイル・キャッシュおよびデータ・キャッシュに使用されるメモリーを物理メモリーにロックして、EssbaseカーネルがシステムRAMを優先的に使用できるようにするかどうかを制御します。
キャッシュ・メモリーのロックを使用するには、直接入出力を使用している必要があります(デフォルトの入出力アクセス・モードは、バッファ入出力です)。直接入出力では、バッファ入出力に比べて大きなインデックス・キャッシュ・サイズが必要です。データベース設定の管理。を参照してください。
ロックによって、Essbaseサーバーで使用されるメモリーのスワップ時に、システム・メモリー・マネージャでキャッシュが使用するメモリーをスワップする必要がなくなるため、Essbaseデータベースのパフォーマンスが向上します。デフォルトでは、キャッシュ・メモリーのロックはオフです。
キャッシュ・メモリーのロックを使用可能にすると、EssbaseカーネルがシステムRAMを優先的に使用できるようになります。キャッシュ・メモリーのロックを使用可能にする場合は、Essbaseカーネル以外が使用できるように、システムRAMの少なくとも3分の1を残してください。EssbaseカーネルにシステムRAMを優先的に使用させない場合は、キャッシュ・メモリーのロックを使用可能にしないでください。
SolarisでEssbaseを実行している場合は、Essbaseを起動してキャッシュ・メモリーのロックを使用可能にする前に、Bourneシェル・スクリプトroot.shを実行します。このスクリプトは、メモリーをロックできるように、サーバーをスーパーユーザー・モードで実行するように設定します。Oracle Enterprise Performance Management System Installation and Configuration Guideを参照してください。
構成可能な各キャッシュで使用する必要のある設定は、データ配分と、データベースの密/疎の構成によって異なります。キャッシュを合算した最大合計サイズは、Essbaseで必要なメモリーを考慮に入れた後の使用可能なメモリー量に等しくなければなりません。
各サイトのニーズは、特定のデータベースであっても異なる場合があります。Essbaseでは、各操作の複雑さとタイプに応じて、データ・ファイル・キャッシュとデータ・キャッシュに必要とされる量のメモリーが割り当てられます。最適なパフォーマンスを得るために十分なメモリーを見積もるには、この項の推奨値を使用します。
初めてEssbaseを使用する場合、キャッシュ・サイズは、次の項で説明するデフォルト値に自動的に設定されます。これらのトピックを使用して、各キャッシュ・サイズの推奨事項を調べて理解してください。
インデックスは、ディスク上のインデックス・ファイルに保管されます。データベースがアクティブであるときは、最後にアクセスされたインデックス・ページがインデックス・キャッシュ内に保持されます。メモリー内に同時に保持できるインデックスの量は、インデックス・キャッシュに割り当てるメモリーの量によって変わります。
インデックス・キャッシュ・サイズの有効性は、計算の性質によって異なります。たとえば、データベース全体を再ロードおよび再計算する場合(毎月リフレッシュされるデータベースなど)、インデックス・キャッシュ・サイズが大きいことは有益ではありません。Essbaseで、計算中に既存のブロックのインデックス・キャッシュが検索されるのではなく、ブロックが作成されるためです。
表172に、インデックス・キャッシュのデフォルト設定および推奨の設定を示します:
表 172. インデックス・キャッシュ・サイズの設定
最大値 | |||
---|---|---|---|
32ビットのEssbase: 4GB 64ビットのEssbase: 256TB |
可能な場合は、すべてのessn.indファイルの合計サイズ。それ以外の場合は、可能なかぎり大きなサイズ。このキャッシュ・サイズを大きくしてもパフォーマンスは向上しないため、インデックス・サイズより大きいサイズに設定しないでください。インデックス・サイズの合計を決定するには、インデックス・ファイルを参照してください。 |
データベースに対する入出力アクセス・モードの変更、または新規作成したすべてのデータベースのデフォルトの変更の詳細については、バッファI/Oと直接I/Oの理解を参照してください。
通常、直接入出力を使用している場合は、インデックス・キャッシュをシステム・リソースで許容されるかぎり大きくします。バッファ入出力を使用している場合は、インデックス・キャッシュを可能なかぎり小さくします。
キャッシュ設定のテストと微調整の詳細については、キャッシュ設定の微調整を参照してください。
直接入出力を使用している場合、データ・ファイル・キャッシュはデータ・ファイル(.pagファイル)をメモリー内に保持します。直接入出力を使用していない場合、データ・ファイル・キャッシュは使用されません。メモリー内に同時に収容できるデータ・ファイル内のデータの量は、データ・ファイル・キャッシュに割り当てるメモリーの量によって変わります。
一般に、データ・キャッシュとデータ・ファイル・キャッシュのどちらに対してメモリーを割り当てるかを選択する必要がある場合、直接入出力を使用しているときは、データ・ファイル・キャッシュを選択します。
表173に、データ・ファイル・キャッシュのデフォルト設定および推奨の設定を示します:
通常、直接入出力を使用している場合は、データ・ファイル・キャッシュをシステム・リソースで許容されるかぎり大きくします。バッファ入出力を使用している場合、データ・ファイル・キャッシュは使用されません。
キャッシュ設定のテストと微調整の詳細については、キャッシュ設定の微調整を参照してください。
データ・ブロックは、物理ディスク上とメモリー内にあります。データ・キャッシュ内に同時に保持できるブロックの数は、データ・キャッシュに割り当てるメモリーの量によって変わります。
ブロックが要求されると、Essbaseではデータ・キャッシュからそのブロックが検索されます。Essbaseでキャッシュ内でブロックが見つかると、ただちにそのブロックがアクセスされます。キャッシュ内でブロックが見つからなかった場合は、Essbaseでは適切なブロック番号のインデックスが検索され、そのブロックのインデックス項目を使用して、ディスク上の適切なデータ・ファイルからブロックが取得されます。要求されたブロックをデータ・キャッシュから取得するほうが速いため、パフォーマンスが向上します。
一般に、データ・キャッシュとデータ・ファイル・キャッシュのどちらに対してメモリーを割り当てるかを選択する必要がある場合、直接入出力を使用しているときは、データ・ファイル・キャッシュを選択します。
表174に、データ・キャッシュのデフォルト設定および推奨の設定を示します:
同時計算の実行時には、データ・キャッシュを増やすことが必要な場合があります。たとえば、同時計算が共通のブロックを共有せず、子の数が最も大きい疎メンバーがそのすべての子ブロックをデータベース内に移入している場合です。データ・キャッシュを同時計算で計算するには、次の式を使用します:
(Size of big block in bytes) * max(Number of children for a Sparse member) * (Number of concurrent batch calc processes) * 2
同時計算の実行時にその他の同時操作(データ・ロードやクエリーなど)を行う場合は、これらの要求に適応するため、データ・キャッシュをさらに増やします。
データ・キャッシュは、バッファ入出力と直接入出力のいずれを使用する場合でも、できるかぎり小さくしてください。
キャッシュ設定のテストと微調整の詳細については、キャッシュ設定の微調整を参照してください。
Essbaseでは、サイズが計算機キャッシュのサイズによって制御されるビットマップを作成して、計算中にデータ・ブロックを記録して追跡できます。ビットマップを使用して存在するブロックを判別することは、データベースを初めて計算する場合や、データが疎であるときにデータベースを計算する場合は特に、ディスクにアクセスして情報を取得するよりも短時間で済みます。
Essbaseでは、データベースに少なくとも2つの疎次元があり、さらに次のいずれかの条件に該当する場合に、計算機キャッシュのビットマップが使用されます:
計算機キャッシュの最適なサイズは、アウトライン内の疎次元の数と密度によって異なります。計算機キャッシュのビットマップの理解、計算機キャッシュのサイズ設定、および計算機キャッシュのサイズ(すなわち、ビットマップの可能なかぎり大きなサイズ)の変更を行うには、必要に応じて次のトピックを使用してください:
計算機キャッシュの場合、データベース内の密次元はEssbaseによって次の2つのグループに分けられます:
Essbaseでは、データベース・アウトライン内の最初の疎次元から開始して、可能なかぎり多くの疎次元がビットマップに対応付けられます。対応付けられる次元はビットマップ次元です。別の疎次元全体をビットマップに対応付けできなくなると、Essbaseによってプロセスが停止されます。ビットマップのサイズは計算機キャッシュによって制御されるため、ビットマップに対応付けられる疎次元の数は、計算機キャッシュ(および疎次元の数とサイズ)によって変わります。
残りの疎次元はアンカー次元です。アンカー次元の場合、ブロックが存在するかどうかを判別するためにEssbaseでビットマップを使用できません。
アンカー次元かビットマップ次元かを識別するには、SET MSG DETAIL計算コマンドを使用して、アプリケーション・ログ内にビットマップの情報を表示します。
ビットマップ内に可能なかぎり多くの次元を配置できるように、アウトライン内の疎次元は慎重に配列します。含まれているメンバーが最も少ない次元から始めて、メンバーが最も多い次元が最後になるようにします。このような順序によって、より多くのビットマップを次元に対応付けられるようになり、結果として計算のパフォーマンスが向上します。
アウトライン内の疎次元の順序は、クエリーのパフォーマンスにも影響を与えます。クエリーのパフォーマンスの最適化を参照してください。 |
複数のアンカー次元が存在する場合、または計算機キャッシュが複数のビットマップをサポートできるだけの大きさでない場合は、Essbaseでは単一のビットマップが使用されます。また、1つのアンカー次元が存在する場合は、複数のビットマップが使用されます。
複数のビットマップは、単一のビットマップを使用する場合よりも多くのメモリーを使用しますが、より高速になります。初めてデータベースを計算するときは、パフォーマンスが特に大幅に向上します。
使用されるビットマップの数は、アンカー次元のメンバーが依存している親の数によって決まります。メンバーには、共有メンバーを持っている場合を除き、1つの従属する親があります。たとえば、Sample.Basicデータベースの製品次元について考えてみてください。メンバーCola (100-10)にはColas (100)という親が1つあります。ただし、Diet Cola (100-20)には、Diet Drinks (Diet)とColas (100)という2つの親があります。製品のメンバーで、3つ以上の依存する親を持つものはありません。したがって、製品がアンカー次元の場合、依存する親の最大数は2です。
Essbaseでは、計算用に表175に示す3つのオプションのいずれかが選択されます:
Essbaseでは、計算機キャッシュのサイズを基準にして、データベース計算に最適なパフォーマンスの計算が選択されます。前述のオプションのいずれかで計算機キャッシュのサイズが小さすぎる場合、Essbaseによって計算機キャッシュは使用されません。計算のパフォーマンスは大幅に低下する可能性があります。
並列計算を使用可能にすると、使用される計算機キャッシュ・オプションが変わる場合があります。計算機のキャッシュを参照してください。
計算機キャッシュの最適なサイズは、システムで使用可能なメモリー、およびデータベースの種類と構成によって異なります。
次の式を使用して、Essbaseに必要な計算機キャッシュ・サイズを計算して、表175の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
表176で示されている、S1からS5までの疎次元を持つサンプル・データベースについて考えてみます:
次のサンプル計算では、このサンプルのデータベースを使用します:
このサンプル計算では、データベースに関して次の状況を仮定します(表175より):
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
Essbaseでは、1つのアンカー次元を持つこのデータベースで複数のビットマップを使用するには、計算機キャッシュが625,000バイトである必要があります。
このサンプル計算では、データベースに関して次の状況を仮定します(表175より):
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
Essbaseでは、1つのアンカー次元が存在するこのデータベースで単一のビットマップを使用するには、計算機キャッシュが125,000バイトである必要があります。
このサンプル計算では、データベースに関して次の状況を仮定します(表175より):
次の計算を実行します:
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
Essbaseでは、複数のアンカー次元が存在するこのデータベースで単一のビットマップを使用するには、計算機キャッシュが2,500バイトである必要があります。
表177は、指定された計算機キャッシュ・サイズに基づいてEssbaseが使用する計算機キャッシュ・オプションを示します:
計算スクリプトでSET MSG SUMMARYコマンドを使用することで、データベースに対してEssbaseで使用できる計算機キャッシュ・オプションを確認できます。空のデータベースに対して次の計算スクリプトを実行します:
SET MSG SUMMARY; CALC ALL;
EssbaseのESSCMDウィンドウまたはアプリケーション・ログに、計算機キャッシュ設定が表示されます。SET MSG SUMMARYとSET MSG DETAILを参照してください。
指定できる計算機キャッシュの最大サイズは、200,000,000バイトです。デフォルトは200,000バイトです。選択する計算機キャッシュ・サイズは、使用可能なメモリーとデータベースの構成によって変わります。
初めてデータベースを計算する場合、計算機キャッシュのサイズは特に重要です。可能であれば、計算機キャッシュを、Essbaseで最適な計算機キャッシュ・オプションを使用するために十分な大きさにしてください。計算機キャッシュ・サイズの計算を参照してください。
Essbaseでは、開いているデータベースごとに、別個の動的計算キャッシュが使用されます。essbase.cfgファイル内のDYNCALCCACHEMAXSIZE設定により、サーバー上の各動的計算キャッシュの最大サイズが指定されます。デフォルトでは、最大サイズは20 MBです。DYNCALCACHEMAXSIZE設定で指定された最大メモリー領域が割り当てられるまで、Essbaseによってデータ・ブロックに対して動的計算キャッシュ内の領域が割り当てられます。動的計算キャッシュ・サイズの変更を参照してください。
データベースごとに、Essbaseによって各データ取得のアプリケーション・ログに2つのメッセージが書き込まれます:
[Thu Oct 17 11:37:17 2007]Local/Sample///Info(1007125) The number of Dynamic Calc Non-Store Members = [7 6 0 0 2 ] [Thu Oct 17 11:37:17 2007]Local/Sample///Info(1007126) The number of Dynamic Calc Store Members = [0 0 0 0 0 ]
最初のメッセージは、取得に要した合計時間を示します。動的計算キャッシュを使用している場合、2つ目のメッセージでは、データの計算機キャッシュ内で計算されたブロックの数(DCC = n)、および一般のメモリーで計算されたブロックの数(non-DCC = n)が表示されます。
動的計算キャッシュに関連する構成ファイル設定は、5つあります。これらの動的計算キャッシュ設定の最適な値は、サーバー・マシン上のメモリー、サーバー・マシン上のすべてのデータベースの構成、およびユーザー・クエリーの指定によって異なります。
次の各構成設定の説明に、使用しているシステム用の値の決定方法に対する推奨事項を示します。サイト独自の要件に適合させるには、設定のテストや調整が必要な場合もあります。
DYNCALCCACHEMAXSIZE: この設定では、サーバー上の動的計算キャッシュそれぞれにEssbaseで割当てが可能な最大サイズを指定します。
推奨する設定値= C * S * U
Cは、essbase.cfgファイル内の適切なCALCLOCKBLOCK設定の値です(SET LOCKBLOCKコマンドにより、使用するCALCLOCKBLOCK設定が指定されます)。
Sは、マシン上のすべてのデータベース内の拡張ブロックの最大サイズです。拡張ブロックのサイズを計算するには、各密次元内のメンバー(動的計算メンバーと動的時系列メンバーを含む)の数を掛け合わせてブロック内のセルの数を求め、そのセルの数に各メンバー・セルのサイズ(8バイト)を乗算します。
例として、Sample.Basic内の密次元内のメンバー・カウントについて考えます(ラベルのみのメンバーはカウントされません):
19 (年、保管済メンバー12、動的計算メンバー7、HTDおよびQTDを含む)
14 (メジャー、保管済メンバー8、動的計算メンバー6)
4 (シナリオ、保管済メンバー2、動的計算メンバー2)
S = 19 * 14 * 4セル(8バイト/セル) =ブロック当たり8512バイト
この数値は、論理ブロック・サイズとしてアプリケーション・ログに出力されます。
Uは、最大の同時ユーザー数を抱えるデータベース上で予想される同時ユーザーの最大数です。
DYNCALCACHEMAXSIZEに値0 (ゼロ)を割り当てることで、Essbaseで動的計算キャッシュを使用しないよう指定します。
デフォルトでは、この値の最大サイズは20MB (20,971,520バイト)です。
DYNCALCCACHEWAITFORBLK: 動的計算キャッシュに対して割り当てられた領域すべてがEssbaseで使用されている場合は、この設定により、キャッシュ内のスペースが使用可能になるまで待機するか、動的計算キャッシュ以外のメモリーでただちにブロックを書き込んで計算するかがEssbaseに指定されます。動的計算キャッシュが小さすぎる場合は、キューに複数のスレッドがあり、それぞれのスレッドがそのデータ・ブロックの計算を待機している可能性があります。
推奨する設定値= FALSE (デフォルトの値)。
TRUEに設定する前に、次の方法を試してください:
サーバー・コンピュータに物理メモリーを追加します。
DYNCALCCACHEMAXSIZEの値を増やしてテストし、これ以上動的計算キャッシュに使用できるメモリーがなくなるまで繰り返します。
DYNCALCCACHEBLKTIMEOUT: 動的計算キャッシュ用の空き領域ができるまでEssbaseが待機する場合の、待機時間の長さを設定します。
Bは、最大のクエリーでアクセスされる論理ブロックの合計数です。
Bの値を決定するには、アプリケーション・ログのメッセージを調べて、クエリーのDyn.Calc.Cacheの「Big Block Allocs」の最大数を確認します。例を動的計算キャッシュの使用状況の確認に示します。
DYNCALCCACHEBLKRELEASE: Essbaseで指定された待機時間が経過しても、動的計算キャッシュ内の領域が使用可能にならない場合、ただちに動的計算キャッシュの外にブロックを記述して計算するか、またはブロックをスワップ・アウトした後、動的計算キャッシュの圧縮ブロック・バッファで一時的に圧縮して、動的計算キャッシュ内に領域を作成するかをEssbaseに指定します。
推奨する設定値= FALSE (デフォルトの値)。
メモリーの空き領域が極端に不足している場合にのみ、TRUEに設定してください。
DYNCALCCACHECOMPRBLKBUFSIZE: Essbaseで指定された待機時間が経過して、DYNCALCCACHEBLKRELEASE設定がTRUEである場合の、動的計算キャッシュの圧縮ブロック・バッファのサイズを決定します。
一般的なデータ、ユーザー・アクセス、および標準的環境(サーバーやネットワークなどを含む)のあるサイトでデータベースを使用した後で、Essbaseのパフォーマンスを確認してください。テストなしで最適なキャッシュ・サイズを予測することは困難です。キャッシュ設定は調整が必要になる場合があります。
インデックス・キャッシュとデータ・ファイル・キャッシュ・サイズ(直接入出力を使用している場合)は、Essbaseの最も重要なキャッシュ設定です。一般に、これらのキャッシュを大きくすれば、スワッピングのアクティビティの発生は減少します。ただし、キャッシュ・サイズを大きく設定すれば常にパフォーマンスが向上するとは限りません。キャッシュ・サイズの考慮事項を理解するには、この項全体をお読みください。
大きなインデックス・キャッシュの利点は、ある時点で頭打ちになります。インデックス・キャッシュのサイズがインデックスのサイズ(すべてのボリューム上のすべてのインデックス・ファイルを含む)と等しくなるかそれを超えると、パフォーマンスは向上しなくなります。ただし、将来のインデックスの増大を計上するため、インデックス・キャッシュのサイズを現在のインデックス・サイズより大きく設定できます。インデックス・キャッシュはインデックス・ページで埋められているため、ストレージの最適な使用のためには、インデックス・キャッシュのサイズをインデックス・ページのサイズ(8 KB)の倍数に設定します。インデックス・サイズの見積りの例については、インデックス・ファイルを参照してください。
可能であれば、データ・ファイル・キャッシュは、保管されているデータのサイズ(すべてのess*.pagファイルの合計サイズ)に等しいサイズに設定します。そうしない場合は、データ・ファイル・キャッシュを可能なかぎり大きくします。保管されているデータの将来の増大を計上する場合は、データ・ファイル・キャッシュ・サイズを保管されているデータの現在のサイズより大きく設定できます。
データ・キャッシュは、データ・ファイル・キャッシュの約0.125倍に設定します。ただし、計算によっては、より大きなデータ・キャッシュ・サイズが必要になる場合があります。多数の同時ユーザーが様々なデータ・ブロックにアクセスする場合は、このキャッシュをより大きくする必要があります。
データ・キャッシュとデータ・ファイル・キャッシュのどちらに対してメモリーを割り当てるのかを選択する必要がある場合で、直接入出力を使用しているときは、データ・ファイル・キャッシュを選択するのが一般的です。以前のバージョンのEssbaseからアップグレードする場合は、Oracle Enterprise Performance Management System Installation and Configuration Guideを参照してください。
すべてのキャッシュに「ヒット率」があります: これは、要求された情報がキャッシュ内で使用可能である回数の割合です。インデックス・キャッシュ、データ・キャッシュおよびデータ・ファイル・キャッシュのヒット率を確認することで、キャッシュ・サイズを大きくすべきかどうかを決定できます。
キャッシュのヒット率は、要求された情報がキャッシュ内にすでに存在したことのある回数の割合を示します。ヒット率が高いということは、データがキャッシュ内にある回数がより多いことを示します。この場合、要求されたデータを次のプロセスのためにディスクから取得する必要がないため、パフォーマンスが向上します。ヒット率1.0は、データが要求されるときは常にキャッシュ内に存在することを示します。これは、キャッシュ設定により最大のパフォーマンスです。
「インデックス・キャッシュ・ヒット率」には、Essbaseカーネルが、ディスクから別のインデックス・ページを取得することなく、インデックス・キャッシュ内でインデックス情報を見つけられた成功率が示されます。
「データ・ファイル・キャッシュ・ヒット率」には、Essbaseカーネルが、ディスクからデータ・ファイルを取得することなく、データ・ファイル・キャッシュ内でデータ・ファイル・ページを見つけられた成功率が示されます。
「データ・キャッシュ・ヒット率」には、Essbaseが、データ・ファイル・キャッシュからデータ・ブロックを取得することなく、データ・キャッシュ内でデータ・ブロックを特定できた成功率が示されます。
メモリーの割当てを確認します。必要な場合は、メモリーの量を一度に少しずつ追加してください。これは、少量ずつ増やすことで、大量のメモリーを増やしたときと同じ効果が得られることがあるためです。通常は、大きなメモリーを割り当てても、ヒット率はごくわずかしか向上しません。
データベースのキャッシュ統計は、performance statistics文法でquery database MaxLステートメントを使用することで確認できます。パフォーマンスの監視。を参照してください。