計算の最適化

この項の内容:

計算パフォーマンスの設計

計算の監視と追跡

シミュレート計算を使用した計算時間の見積り

計算によるデータベース・サイズへの影響の見積り

並列計算の使用

式の使用

ボトムアップ計算の使用

キャッシュの管理によるパフォーマンスの改善

ブロック・ロック・システムの処理

2パス計算の使用

メンバー・セット関数またはパフォーマンスの選択

#MISSING値の集計

#MISSINGブロックの削除

計算の最適化に関するその他の問題の特定

この章の情報は、ブロック・ストレージ・データベースのみに適用され、集約ストレージ・データベースとは関係がありません。

関連項目:

計算パフォーマンスの設計

データベースの構成の仕方によって、計算パフォーマンスを最適化できます。

サイトの最適な構成は、データベースの性質とサイズによって異なります。次の項の情報は、単にガイドラインとして使用してください。

ブロック・サイズとブロック密度

8 KB - 100 KBのデータ・ブロック・サイズならば、大抵の場合は最適なパフォーマンスが得られます。

データ・ブロックが8 KBよりも大幅に少ない場合、通常インデックスは非常に大きくなり、インデックスのディスクへの書込みやディスクからの取得がEssbaseで強制的に実行されます。このプロセスにより、計算の速度が遅くなります。

データ・ブロックが100 KBよりも大幅に大きい場合は、高機能計算が効率よく機能しません。高機能計算についての理解。を参照してください。

計算パフォーマンスとデータ・ストレージを最適化するには、データベースの密次元と疎次元の構成を調整することによって、データ・ブロック密度とデータ・ブロック・サイズのバランスをとります。次の点に留意してください:

  • データ・ブロックのサイズは8 KBから100 KBにして、ブロック密度は可能なかぎり高くしてください。

  • 代表的なデータが含まれているデータベースの、最も期待できる構成のテスト計算を実行してください。結果を確認して、最高の計算パフォーマンスを得られる構成を決定してください。

データ・ブロックとデータ・ブロック・サイズの潜在的な数や実際の数など、データベースに関する情報を表示できます。

  データ・ブロック情報を表示するには、次のツールを使用します:

ツール

トピック

場所

Administration Services

データ・ブロック統計の確認

Oracle Essbase Administration Services Online Help

ESSCMD

GETDBINFO

『Oracle Essbaseテクニカル・リファレンス』

疎次元の順序

データベース・アウトライン内の標準の(属性以外の)疎次元の順序を変更することで、計算パフォーマンスが向上する場合があります。含まれているメンバーが最も少ない次元を最初に配置して、含まれているメンバーの数によって標準の疎次元を順序付けます。この配列により、サイトによっては多くの点で改善される可能性があります:

  • 大規模な次元(1000以上のメンバーを含む次元など)を持つデータベース・アウトラインの場合は、計算機キャッシュの効率性が上がり、パフォーマンスが約10%改善されます。

  • 最もメンバー数の多い疎の標準次元が、アウトライン内の最後の次元である場合は、並列計算が使用される可能性が高くなります(並列計算が使用可能な場合)。

増分データ・ロード

多くの企業では、データを増分的にロードします。たとえば、月ごとにその月分のデータをロードする場合があります。

データを増分的にロードするときの計算パフォーマンスを最適化するには、時間としてタグ付けされた次元を疎次元にします。時間次元が疎の場合、データベースにはそれぞれの期間のデータ・ブロックが含まれます。データを期間ごとにロードする場合は、該当の期間を含むブロックが少ないため、Essbaseでアクセスされるデータ・ブロックが少なくなります。したがって、高機能計算が使用可能になっている場合は、ダーティとしてマークされたブロックのみが再計算されます。たとえば、3月のデータをロードする場合は、3月のデータ・ブロックと3月に従属する親のみが更新されます。

ただし、本来密である時間次元を疎にすると、インデックスのサイズが大幅に拡大し、その大きなインデックスに対応して物理的出入力アクティビティの量が増えるために、パフォーマンスの速度が低下する可能性があります。

時間としてタグ付けされた次元が密の場合でも、疎次元に対する部分的なデータ・ロードを行うときは、高機能計算の利点の一部を利用できます。たとえば、製品が疎で、1つの製品のデータをロードする場合は、時間が密で高機能計算が使用可能になっている場合でも、Essbaseでは部分的なロードによって影響を受けるブロックのみが再計算されます。

増分ロードの詳細は、集約ストレージ・データベースへのデータのロードを参照してください。

複数のフラット次元を含むデータベース・アウトライン

データベース・アウトラインに複数のフラット次元が含まれている場合は、計算パフォーマンスが影響を受けることがあります。フラット次元の親の数は非常に少なく、それぞれの親に何千もの子があります。言い換えれば、フラット次元には多数のメンバーがあり、レベルは少ないことになります。

データベース・アウトラインに中間レベルを追加することで、複数のフラット次元を含むアウトラインに対するパフォーマンスを改善できます。

式と計算スクリプト

計算スクリプトの式と次元を慎重にグループ化することで、計算パフォーマンスを大幅に向上できる場合があります。この方法で、計算中にデータベース内のデータ・ブロックがEssbaseによって循環される回数を、可能なかぎり少なくできます。

計算スクリプトのコマンドを、データベース計算が可能なかぎり簡単になるように順序付けます。すべての式をデータベース・アウトラインに適用することと、デフォルト計算(CALC ALL)を使用することを検討してください。この方法で、計算パフォーマンスを向上できる場合があります。

ブロック・ストレージ・データベース用の計算スクリプトの作成および計算パスを参照してください。

計算の監視と追跡

計算スクリプトで次の各コマンドを使用すれば、Essbaseでのデータベースの計算に関するアプリケーション・ログの情報を表示できます。

SET MSG SUMMARYとSET MSG DETAIL

計算スクリプトでSET MSG SUMMARYとSET MSG DETAIL計算コマンドを使用すると、次の処理を行うことができます:

  • 計算設定(完了通知メッセージが使用可能になっているかどうかなど)の表示

  • 作成済、読取り済および書込み済のデータ・ブロック数に関する統計の提供

  • 計算済データ・セル数に関する統計の提供

また、SET MSG DETAILにより、Essbaseでデータ・ブロックが計算されるたびに、情報メッセージが表示されます。SET MSG DETAILは、データ・ブロックの計算順序を調べる場合や、高機能な再計算をテストする場合に有用です。

注意

SET MSG DETAILを使用すると処理のオーバーヘッドが高くなるため、このコマンドはテスト計算のときにのみ使用してください。

SET MSG SUMMARYで生じる処理のオーバーヘッドは、データベースのサイズに応じて約1% - 5%であるため、このコマンドはあらゆる計算に適しています。

SET NOTICE

計算スクリプトでSET NOTICE計算コマンドを使用して、計算済のデータベースのパーセンテージを示す計算完了通知を表示できます。SET MSG SUMMARYコマンドをSET NOTICEコマンドと一緒に使用すれば、完了通知間の計算の進捗状況を表示できます。非常に小さいデータベースで使用する場合を除き、完了通知によって計算パフォーマンスが大幅に低下することはありません。

シミュレート計算を使用した計算時間の見積り

計算スクリプトでSET MSG ONLYを使用して、計算のシミュレーションを実行できます。シミュレート計算により、同じデータとアウトラインに基づく実際の計算のパフォーマンスを分析するために役立つ結果が得られます。

SET NOTICE HIGHなどのコマンドでシミュレート計算を実行することで、それぞれの疎次元の計算にかかる相対的な時間を把握できます。その後、1つ以上の次元で実際の計算を実行することで、フル計算にかかる時間を見積ることができます。これは、シミュレート計算の実行にかかる時間が、実際の計算の実行にかかる時間に比例するためです。

たとえば、計算を9:50:00 AMに開始し、最初の通知のタイムスタンプが09:50:10 AM、2番目のタイムスタンプが9:50:20 AMの場合、この部分の計算にはそれぞれ10秒かかったことがわかります。次に、最初の部分のみで実際の計算を実行し、その実行に30秒かかったことに気づいた場合、その他の部分にも30秒かかることがわかります。合計2つのメッセージがあるとすると、実際の計算には約60秒((20 / 10 * 30 = 60秒)かかることになります。

次の項目では、シミュレート計算の実行方法、およびシミュレート計算を使用して計算時間を見積る方法について説明します。

シミュレート計算の実行

計算時間を見積る場合は、実際のデータベースに基づいたデータ・モデル上でシミュレート計算を実行する必要があります。

  シミュレート計算を実行するには:

  1. 情報を取得するすべての次元および詳細レベルを使用して、データ・モデルを作成します。

  2. すべてのデータをロードします。この手順では、データベースにロードされたデータのみが計算されます。

  3. 次のエントリを使用して計算スクリプトを作成します:

                SET MSG ONLY;
    SET NOTICE HIGH;
    CALC ALL;
             

    密次元に動的計算を使用する場合、CALC ALLコマンドを、計算の必要な特定の次元に置換します(CALC DIM EASTなど)。

    注:

    スクリプトを検証しようとすると、Essbaseでエラーが報告されます。このエラーは無視してください。

  4. スクリプトを実行します。

  5. アプリケーション・ログで最初の疎の計算メッセージを見て、メッセージ内の時間を確認します。

  6. それ以降の各メッセージの時間も確認します。

  7. モデルの密次元で動的計算が行われていないものに対して、計算を実行します:

                CALC DIM (
                DENSE_DIM1
                , 
                DENSE_DIM2
                , …);
             
  8. モデルの疎次元を計算します:

                CALC DIM (SPARSEDIM1, SPARSEDIM2, …);
             
  9. 通知が行われる間隔を見積り、疎の計算結果と照らし合わせて確認します。それによって、計算にかかる時間を見積ることができます。

計算時間の見積り

シミュレート計算を実行した際、結果を記録し、その結果を使用して実際の計算時間を見積ります。

  合計計算時間を見積るには:

  1. SET NOTICE HIGHで生成されたアプリケーション・ログのメッセージが、どのくらいの間隔で生成されたかをすべて確認します。

    表185を参照してください。

  2. 次の計算方法を使用して、実際の計算にかかる時間を見積ります:

    シミュレート計算にかかった合計時間/シミュレート計算における最初の通知間隔X実際の計算における最初の間隔

    表 185. ログ・メッセージの間隔の例

    計算通知番号

    計算シミュレーションの間隔(秒)

    疎次元の計算間隔(秒)

    1

    7

    45

    2

    5

     

    3

    6

     

    4

    3

     

    5

    4

     

    6

    2

     

    7

    6

     

    8

    4

     

    9

    3

     

    10

    3

     

    合計計算時間

    43

     

    この例では、43 / 7 X 45 = 276.4秒となるため、実際の計算は276.4秒かかることになります。

見積りの精度に影響を与える要素

次の問題を除けば、シミュレート計算では通常、誤差5%の範囲で計算時間を見積ることができます:

これらの要素が存在する場合、Essbaseでのシミュレート計算が30 - 40% (SET NOTICE HIGHによって生成されるメッセージの30 - 40%)に達したときに、この見積りテクニックによって計算時間がより厳密に予測されます。『Oracle Essbaseテクニカル・リファレンス』を参照してください。

連鎖的な影響による変動

計算時間の見積りテクニックとしてSET MSG ONLYを使用する場合は、後でCALCNOTICE間隔と照らし合わせて検証する必要があります。この見積りテクニックの結果は、次のような連鎖的な影響によって変動します:

  1. 実際の集計プロセスによって、各ブロックのブロック密度に違いが出る。そのため

  2. Essbaseで各ブロックがディスクに書き込まれるスピードに違いが出る。そのため

  3. 各ブロックがキャッシュで処理されるスピードに違いが出る。そのため

  4. 実際の結果は、予想された計算時間と異なる場合がある。

アウトラインの構造による変動

実際の結果を予測とは大きく異なるものにする可能性のあるもう1つの要素は、アウトラインの構造です。CALCNOTICE間隔に基づいた計算では、アウトライン全体を通して処理時間のバランスが均等であることが前提とされます。このバランスを損う可能性のある要素として、次のような状況があります:

  • モデル内に他の疎次元と比べて大きな疎次元が1、2個含まれている。

  • 大きな次元に複数の共有ロールアップを発生させるメンバー構成がある。

シミュレーション結果に基づくアウトラインの変更

シミュレート計算による見積りと分析を実行したら、アウトラインに変更を加えてパフォーマンスを改善できます。

アウトライン内の上から下へ、上位ブロックで最もパーセンテージの増加が少なくなるよう、次のように疎次元を順序付けします:

  • モデルのフル・ロードの後の、レベル0のブロック100,000

  • 疎次元1のみを集計した状態の上位レベルのブロック: 1,000,000

  • 疎次元2のみを集計した状態の上位レベルのブロック: 3,000,000

  • 疎次元3のみを集計した状態の上位レベルのブロック: 10,000,000

  • 疎次元4のみを集計した状態の上位レベルのブロック: 300,000

  • 疎次元5のみを集計した状態の上位レベルのブロック: 5,700,000

例:

  • #4 (メンバー= 10,000、4レベル)

  • #1 (メンバー= 500、2レベル)

  • #2 (メンバー= 100、4レベル)

  • #5 (メンバー= 10,000、4レベル)

  • #3 (メンバー= 20、単層)

シミュレート計算を使用して、上位ブロックのカウントを生成します。これらの数は、前述のアイテムの隣に示されている実際の次元サイズにかかわらず、正確な場合があります。

注意

メンバーの最大のカウントは、必ずしも有効な予測材料とはいえません。

計算によるデータベース・サイズへの影響の見積り

データベース内の現在のブロック数をもとに、CALC ALLで作成されるブロックの数を見積ることができます。

  対話型モードを使用して、計算の結果として作成されるデータベース・サイズを見積るには、次の操作を実行します:

  1. データをロードし、CALC ALLコマンドを発行して、平均ブロック・サイズを確認します。

  2. MaxLシェルを起動し、Essbaseにログオンして、アプリケーションとデータベースを起動します。例:

                essmsh 
    login 
                username password
                ;
    alter system load application 
                appname
                ;
    alter application 
                appname
                 load database 
                dbname
                ;
             
  3. アプリケーションおよびデータベース名を指定して次のMaxLステートメントを入力し、ブロック数として戻される値を確認します:

                query database 
                appname
                .
                dbname
                 get estimated size;
             
  4. ブロック数に、データベース内のブロックの平均サイズを掛けます。

    結果は±10%で正確です。

Essbaseにクエリーしてデータベースのフル・サイズの見積りを求める場合は、次の条件に注意してください:

  • このクエリーはCALC ALLの後に実行する必要があります。その他の計算では正しい結果は得られません。

  • 式は疎次元に対するもののみ、正しい結果が得られます。

  • データのロック(コミット済アクセス)と組み合せた、メンバーに対するトップダウン計算では、正確な結果は得られません。

  • パーティションを見積る必要がある場合は、すべてのパーティションのデータベース・サイズの見積りについてEssbaseにクエリーして、その結果を加える必要があります。ソース・データベースのみのサイズについてクエリーした場合、見積りに含まれるのはソース・データベース・サーバー上のデータのみです。

次の項では、並列計算と、並列計算によってサイトでパフォーマンスを向上させる方法について説明します。

Essbaseには、計算を呼び出す方法が2つあります:

  • アウトライン自体によって、計算が暗黙的に指定されます。

  • ユーザーが作成する計算スクリプトによって、計算が明示的に指定されます。スクリプトには、式と計算命令が含まれます。

計算がどのように呼び出されたかにかかわらず、Essbaseでは次のいずれかのモードで計算を実行できます:

  • シリアル計算はデフォルトです。シリアル計算では、各計算パスは単一のプロセッサで実行されるようスケジュールされます。計算スクリプトから呼び出された場合、計算は、計算スクリプトに現れる順に実行されます。

  • 並列計算では、各計算パスがサブタスクに分割されます。別のサブタスクとは独立して実行できるサブタスクは、最高64または128のスレッドで同時に実行されるようスケジュールされます。32ビットのプラットフォームで稼働中のブロック・ストレージ・データベースは最高64のスレッドをサポートします。64ビットのプラットフォームで稼働中のブロック・ストレージ・データベースと、集約ストレージ・データベース(32ビットまたは64ビットのプラットフォームのどちらで稼働中の場合も)は、最高128のスレッドをサポートします。各スレッドは異なるプロセッサ上にある場合があります。

  デフォルトのシリアル計算から並列計算に変更するには、2つ以下の構成設定を変更してからサーバーを再起動するか、計算スクリプトに命令を追加します。

並列計算の使用可能化を参照してください。

次の項目では、並列計算の詳細について説明します。

Essbaseによる実行可能性の分析

Essbaseでは、並列計算を有効にした計算パスを実行する前に、必ず並列計算の使用が可能かどうか評価されます。

Essbaseでは、アウトラインと、各計算パスで要求される計算が分析されます。1つの計算で複数のパスが要求される場合があることに注意してください。動的計算、2パスとしてタグ付けされたメンバーの存在、またはある種の相互依存性を引き起こす計算などの状況によって、複数のパスの必要性が生じる場合があります。計算パスを参照してください。

Essbaseで並列計算が可能と判定されると、Essbaseでは計算が互いに独立した小さなタスクに分割されます。計算の間、Essbaseではこれらの小さなタスクは同時に実行されます。

ただし、パスに含まれている式の間に複雑な相互依存性がある場合は、並列計算が使用可能になっていても、Essbaseではシリアル計算が使用されます。このような相互依存性があると、並列計算が不可能になります。

並列計算のガイドライン

アウトラインの構造とアプリケーションの設計によって、並列計算を使用可能にすることで計算パフォーマンスを改善できるかどうかが決まります。並列計算を使用可能にする前に、次のガイドラインについて検討してください。これらのガイドラインは、並列計算の利点を十分に活用するために役立ちます:

  • アンコミット・アクセスの分離レベルを使用してください。コミット・アクセスの分離レベルを使用する場合、並列計算はサポートされません。アンコミット・アクセスを参照してください。

  • 計算の中にある1つ以上の式によって、Essbaseで使用可能になっていても並列計算を使用できない場合があります。並列計算の設定にかかわらずシリアル計算を強制実行する可能性のある式の説明については、式による制限を参照してください。

  • 計算タスクは、アウトラインの最後のnの疎次元に従って生成されます。タスクの識別に使用されるこれらの疎次元は、タスク次元と呼ばれます。タスク次元の数であるnは、Essbaseによって動的に選択されるか、ユーザーがessbase.cfgファイルのCALCTASKDIMSに値を指定することで数値が上書きされます。

    アウトライン内の疎次元は、(MaxLステートメント「query database DBSNAME get dbstats dimension」で報告されるように)次元の実際のサイズに基づいて、最も小さいものから最も大きいものの順に並べます。順序に関するこの推奨事項は、計算機キャッシュ・サイズの最適化のための推奨事項や、その他のアウトラインに関する推奨事項と一貫性があります。(最後の疎次元よりも多くの)追加の次元の使用が必要な場合の説明と、使用される疎次元の数を増やす方法については、並列計算の追加的タスクの特定を参照してください。

  • 並列計算は、パーティション化されていないアプリケーション、および次のようなパーティション・アプリケーションに対して効果的です:

    • 複製パーティション

    • リンク・パーティション

    • 透過パーティション(計算がターゲット・データベースで行われる場合)。essbase.cfgファイル内のCALCTASKDIMS、または計算スクリプト内のSET CALCTASKDIMSで指定する疎次元の数は、1 (デフォルト値)に設定する必要があります。透過パーティションでの並列計算の使用に課せられる制限の詳細は、透過パーティションによる制限を参照してください。CALCTASKDIMSまたはSET CALCTASKDIMSの使用の詳細は、並列計算の追加的タスクの特定を参照してください。

  • データベースに増分再構築を選択し、アウトラインに加えた変更のために再構築が保留となっている場合は、並列計算は使用しないでください。予測不可能な結果が生じる可能性があります。

  • 計算やデータ更新などの更新トランザクションは、MDXクエリーやレポート・スクリプトより多くのリソースを消費する要求です。ストレージ・デバイスが高速な場合、Essbaseでは、より多くの並列計算スレッドを実行して、妥当なスループットを実現することができます; ストレージ・デバイスが高速でない場合は、Essbaseで実行可能な並列計算スレッドやその他の更新スレッドの数は少なくなります。更新トランザクションの数は、Essbase.cfg設定のMAXACTIVEUPDATETRANSACTIONSを使用して制御できます。詳細は、『Oracle Essbaseテクニカル・リファレンス』のMAXACTIVEUPDATETRANSACTIONSに関するトピックを参照してください。

並列計算と他のEssbase機能との関係

次の項では、並列計算と他のEssbase機能との関係について説明します。

取得パフォーマンス

並列計算のパフォーマンスを最大化するために、最も大きな疎次元をアウトラインの最後に配置すると、取得パフォーマンスの速度が低下する場合があります。クエリーのパフォーマンスの最適化を参照してください。

式による制限

ある式が存在することによって、シリアル計算が強制的に実行される場合があります。次のような式の配置により、シリアル計算が強制的に実行される可能性があります:

  • 密メンバー(すべての保管済メンバー、および保管済メンバーが依存するあらゆる動的計算メンバーを含む)に設定された式によって、並列計算のタスクを識別するために使用される、次元内のメンバーに相関関係が発生する場合。

  • 計算スクリプト内で、@VAR、@ARRAY、@XREFまたは@XWRITEを使用して宣言された変数への参照が、式に含まれる場合。

  • @XREFを使用する疎次元メンバーの式で、疎のメンバーの次元がフル計算される場合。@XREFは、他の保管済メンバーに依存しない密の動的計算メンバーにある場合、バッチ計算中にシリアル計算を強制実行しません。

  • メンバーの式によって循環的な依存が発生する場合。たとえば、メンバーAにメンバーBを参照する式があり、メンバーBにメンバーCを参照する式があり、メンバーCにはメンバーAを参照する式があるような場合。

  • 密または疎のメンバーに設定された式が、並列処理のタスクの特定に使用される次元の、1つ以上のメンバーに依存する場合。

  • 密次元メンバーの式に、他の疎次元のメンバーへの参照が含まれる場合。

並列計算を妨げる可能性のある式を使用する必要がある場合は、その式のメンバーを動的計算としてマークするか、その式を計算のスコープから除外できます。式によって並列計算が妨げられるかどうかを確認するには、アプリケーション・ログを確認します。並列計算の監視を参照してください。

計算機のキャッシュ

計算パスの開始時に、Essbaseで計算機キャッシュのサイズと並列性の度合いが確認され、その後、最大のパフォーマンスを得るための適切な計算機キャッシュのビットマップ・オプションが使用されます。そのため、並列計算に使用されるビットマップ・オプションは、シリアル計算に使用されるものとは異なる場合があります。

たとえば、Essbaseでシリアル計算が実行され、複数のビットマップと単一のアンカー次元が使用されるとします。計算機キャッシュを明示的に変更しないと、Essbaseでは単一のビットマップと単一のアンカー次元のみを使用して並列計算が実行される可能性があります。

ビットマップ・オプションを制御する計算機キャッシュ・モードは、計算パスの開始時に、アプリケーション・ログの次のような項目を確認することで判断できます:

      Multiple bitmap mode calculator cache memory usage has a limit of [50000] bitmaps.
   

複数のビットマップ・モードで並列計算を使用している場合は、メモリー使用率が高くなることがあります。このような場合は、構成設定PARCALCMULTIPLEBITMAPMEMOPTを使用して、複数のビットマップ・モードでのメモリーの使用を最適化できます。この設定は、MULTIPLEBITMAPMEMCHECKと一緒に使用することも、別個に使用することもできます。PARCALCMULTIPLEBITMAPMEMOPTを使用可能にするには、essbase.cfgファイルに次の行を追加します:

      PARCALCMULTIPLEBITMAPMEMOPT TRUE
   

計算機キャッシュのサイズ設定を参照してください。

透過パーティションによる制限

透過パーティションが含まれる並列計算には次のような制限があります:

  • 計算がターゲットで実行されないかぎり、透過パーティション間で並列計算は使用できません。

  • CALCTASKDIMSまたはSET CALCTASKDIMSを1 (デフォルト)に設定して、固定次元を1つのみにする必要があります。

  • 複数のビットマップを使用できるように、計算機キャッシュを増やす必要があります。ビットマップ・オプションを制御する計算機キャッシュ・モードは、計算パスの開始時に、次のようなアプリケーション・ログの項目を確認することで判断できます。

                Multiple bitmap mode calculator cache memory usage has a limit of [50000] bitmaps.
             

    計算機キャッシュのサイズ設定を参照してください。

再構築の制限

増分再構築を選択した場合は、並列計算を使用しないでください。並列計算では増分再構築はサポートされていません。

コミットのしきい値の調整

Essbaseでは、「内部コミットまでのブロック数」というデータベース設定で指定されたコミットのしきい値が確認されます。この設定により、内部コミットの前に書込みできるデータが10 MB未満である必要がある場合は、計算パスの実行中のコミットのしきい値が、Essbaseにより自動的に10 MBに増やされます。この設定が10 MBより大きい場合は、Essbaseでは設定値が使用されます。

一時的なしきい値の増加が発生した場合は、それを示すメッセージがEssbaseによりアプリケーション・ログに書き込まれます。

計算に10 MB以上のディスク・スペースを余計に割り当てられる場合は、パフォーマンスを改善するためコミットのしきい値(つまり、コミット発生前のブロック数)を非常に大きな数に増やすことを検討してください。

  現在のしきい値を表示するには、次のツールを使用します:

ツール

トピック

場所

Administration Services

データの整合性オプションの設定

Oracle Essbase Administration Services Online Help

MaxL

display database dbs_name

『Oracle Essbaseテクニカル・リファレンス』

ESSCMD

GETDBINFO: 内部コミットの発生までに変更が加えられるブロックの数

『Oracle Essbaseテクニカル・リファレンス』

  コミットのしきい値を変更するには、次のツールを使用します:

ツール

トピック

場所

Administration Services

データの整合性オプションの設定

Oracle Essbase Administration Services Online Help

MaxL

alter database dbs_name set implicit_commit after n blocks

『Oracle Essbaseテクニカル・リファレンス』、MaxLステートメントのリスト

ESSCMD

SETDBSTATEITEM 21

ESSCMDによる分離レベル設定の指定例

アンコミット・アクセスを参照してください。

分離レベルの制限

並列計算には「アンコミット」モードを使用する必要があります。

  分離レベルをアンコミット・モードに設定するには、次のツールを使用します:

ツール

トピック

場所

Administration Services

データの整合性オプションの設定

Oracle Essbase Administration Services Online Help

MaxL

alter database dbs_name disable committed_mode

『Oracle Essbaseテクニカル・リファレンス』、MaxLステートメントのリスト

ESSCMD

SETDBSTATEITEM 18

ESSCMDによる分離レベル設定の指定例

アンコミット・アクセスを参照してください。

現在の並列計算設定の確認

サーバーの構成ファイルまたは使用する計算スクリプトを調べれば、並列計算が使用可能になっているかどうかを確認できます。

  サーバーの構成ファイルで、並列計算が使用可能になっているかどうかを確認するには:

  1. サーバーのessbase.cfgファイルをテキスト・エディタで開きます。

  2. パラメータCALCPARALLELを探して、そこで指定されている値を確認します。

    計算を完了するために同時にタスクを実行できるスレッドの数には、1から128の値が指定されています。32ビットのプラットフォームで稼働中のブロック・ストレージ・データベースは最高64のスレッドをサポートします。64ビットのプラットフォームで稼働中のブロック・ストレージ・データベースと、集約ストレージ・データベース(32ビットまたは64ビットのプラットフォームのどちらで稼働中の場合も)は、最高128のスレッドをサポートします。『Oracle Essbaseテクニカル・リファレンス』を参照してください。

  計算スクリプトで並列計算が設定されるかどうかを確認するには、SET CALCPARALLELコマンドを探します。スクリプトによって並列計算が複数回使用可能または使用不可になる場合があるため、スクリプトは慎重に見直してください。

並列計算の使用可能化

並列計算を使用するには、次のいずれかの方法により、並列計算をサーバー・レベル、アプリケーション・レベルまたはデータベース・レベルで使用可能にします:

  • 適切な構成設定をessbase.cfgファイルに追加または編集します。

    『Oracle Essbaseテクニカル・リファレンス』の「CALCPARALLEL」および「CALCTASKDIMS」を参照してください。

  • 計算スクリプトに適切な計算コマンドを追加します。

    『Oracle Essbaseテクニカル・リファレンス』の「SET CALCPARALLEL」および「SET CALCTASKDIMS」を参照してください。

並列計算設定では、次のような標準的な優先度ルールが使用されます:

  • データベース設定は、アプリケーション設定よりも優先されます。

  • アプリケーション設定は、サーバー設定よりも優先されます。

並列計算をサーバー・レベルで設定すると、サーバー上のすべてのアプリケーションとデータベースで実行されるすべての計算で、並列計算が使用可能になります。構成ファイル内で並列計算をサーバー・レベルで設定してから、アプリケーション固有またはデータベース固有のエントリを計算スクリプトに追加することで、個々のアプリケーションまたはデータベースの並列計算を使用不可にできます。

注意

並列計算の使用可能化を試みる前に、この章全体をお読みください。

  並列計算を使用可能にするには:

  1. 構成ファイル内で並列計算を使用可能にする予定の場合は、現在のステータスを調べて、エントリが存在するかどうかを確認します。

    現在の並列計算設定の確認のプロセスを使用します。

  2. サーバーのessbase.cfgファイルにCALCPARALLELを追加またはこれを変更するか、計算スクリプトにSET CALCPARALLELを追加します。

  3. 必要な場合は、並列計算のタスクを特定するために、Essbaseで複数の疎次元を使用可能にします。

    並列計算の追加的タスクの特定のプロセスを使用します。

  4. 構成ファイルに項目を追加した場合は、サーバーを再起動します。

  5. 計算を実行します。

オラクル社は、CALCPARALLELの値を、計算に使用できるプロセッサの数より1つ小さい数に設定することをお薦めします。これにより残りのプロセッサを、オペレーティング・システムまたはキャッシュからダーティ・ブロックの書出しを行うEssbaseプロセスで使用できます。

ヒント:

サイトで必要な場合は、CALCPARALLELとSET CALCPARALLELを組み合せて使用できます。たとえば、CALCPARALLELをサーバー・レベルでオフとして設定し、計算スクリプトを使用して、並列計算を必要に応じて使用可能または使用不可にできます。

並列計算の追加的タスクの特定

Essbaseでは、デフォルトで、反復的な手法を使用して、並列計算に使用する最適な数のタスク次元が選択されます。

必要な場合は、Essbaseで、並列計算に特定の数(n)のタスク次元を使用するよう指定できます。たとえば、最後の疎次元のメンバーにFIXステートメントがある場合、アウトラインから最後の1つ前にある疎次元も含めることができます。これら2つの次元の一意のメンバーの各組合せは、潜在的なタスクとして特定され、より多くの小さなタスクが作成されて、並列処理の機会が増え、ロード・バランシングが改善されます。

  並列計算用のタスク次元の数を指定するには:

  1. 並列計算が使用可能かどうかを確認します(不明な場合)。

    現在の並列計算設定の確認を参照してください。CALCPARALLEL (または計算スクリプト内のSET CALCPARALLEL)がない場合、CALCTASKDIMSは効力を持ちません。

  2. オプション: Essbaseでは、並列計算に使用するデフォルトの数(n)のタスク次元が選択され、この数は情報メッセージとしてアプリケーション・ログ・ファイルに表示されます; たとえば、次のようなメッセージが表示されます: [2]タスク次元を使用して並列化しています。デフォルトのnの設定を上書きするには、サーバーのessbase.cfgファイルにCALCTASKDIMSを追加または変更するか、スクリプトの最初に計算スクリプト・コマンドのSET CALCTASKDIMSを使用します。

  3. サーバーのessbase.cfgファイルにCALCTASKDIMSを追加またはこれを変更した場合は、Essbaseを再起動します。

  4. 計算スクリプトを使用している場合は、スクリプトを実行します。

注:

場合によっては、CALCTASKDIMSまたはSET CALCTASKDIMSで指定された数よりも少ない次元を使用して、タスクが特定されることもあります。『Oracle Essbaseテクニカル・リファレンス』を参照してください。

並列計算の監視

並列計算に関連するイベントを、アプリケーション・ログで表示できます:

  アプリケーション・ログを表示するには、『Oracle Essbase Administration Servicesオンライン・ヘルプ』の「ログの表示」を参照してください。

Essbaseでは、それぞれの計算パスについて、次のような様々なタイプの情報をアプリケーション・ログに書き込んで、並列計算をサポートします:

  • 並列計算を使用可能にしていて、Essbaseにより並列計算が実行可能であると判断されている場合は、Essbaseにより、アプリケーション・ログに次のようなメッセージが書き込まれます:

                Calculating in parallel with 
                n
                 threads
             

    nは、CALCPARALLELまたはSETCALCPARALLELで指定された、同時タスクの数を表します。

  • 並列計算の使用を妨げる(シリアル計算を強制的に実行する)ような式については、Essbaseにより、アプリケーション・ログに次のようなメッセージが書き込まれます:

                Formula on ((or backward dependence from) mbr memberName prevents calculation from running in parallel.
             

    memberNameは、該当する式が存在しているメンバーの名前を表します。アプリケーション・ログでこのようなメッセージを確認し、式を削除することを検討できます。また、可能な場合は、該当のメンバーを動的計算としてタグ付けして、それらのメンバーが計算パスで機能しないようにすることを検討できます。

  • 同時実行が可能なタスクの数(CALCPARALLELやSETCALCPARALLELの値ではなく、データに基づくもの)を示す次のようなメッセージが、Essbaseによりアプリケーション・ログに書き込まれます:

                Calculation task schedule [576,35,14,3,2,1]
             

    この例のメッセージは、576のタスクを同時に実行できることを示しています。576のタスクが完了した後、他の35のタスクを同時に実行できる、という具合に続きます。

    並列計算の効果は、最初のいくつかの段階で最も大きく、同時に実行されるタスクが少なくなっていくにつれて減少します。

    並列処理の度合いは、タスク・スケジュールにあるタスクの数によって異なります。この数が多いほど、並行して実行できるタスクの数が増え、パフォーマンスが向上します。

  • 空の(計算が含まれない)タスクの数を示すメッセージが、Essbaseによりアプリケーション・ログ・ファイルに書き込まれます:

                [Tue Jun 27 12:30:44 2007]Local/CCDemo/Finance/essexer/
    Info(1012681) Empty tasks [291,1,0,0,0,0]
             

    この例では、レベル0のタスクのうち291が空であることがEssbaseにより示されています。

    計算タスク・スケジュールで指定されたタスク数に対する、空のタスク数の比率が50%を超える(たとえば、291 / 576)場合は、データ・モデル内の希薄さ(密度の低さ)により、並列処理を実行してもパフォーマンスが改善されない可能性があります。

    密と疎の割当てを変更して空のタスク数を減らせば、並列計算によってパフォーマンスを向上させることができます。

式の使用

データベース・アウトラインで式を慎重に使用することで、計算パフォーマンスが大幅に向上する場合があります。たとえば、式を計算スクリプトに設定するかわりに、データベース・アウトラインにメンバーの式を設定することで、計算パフォーマンスが向上する場合があります。ブロック・ストレージ・データベース用の式の作成。を参照してください。

次の項で、パフォーマンスに影響を与える式の問題を扱う方法について説明します。

集計

データベース・アウトラインを使用して値をロール・アップする方が、式を使用して値を計算するよりも効率的です。たとえば、図154に示すように、メンバー100に対するメンバー100-10、100-20および100-30の集計の方が、次の式をメンバー100に適用するより効率的です:

      100-10 + 100-20 + 100-30
   

図 154. 集計例

この図は、メンバー100-10、100-20および100-30がメンバー100に集計されたアウトラインを示しています。

簡単な式の使用

簡単な式を使用するときに、ブロック・サイズが異常なほど大きくはない場合は、計算パフォーマンスに大きな影響を与えることなく、疎次元または密次元のいずれかのメンバーに式を設定できます。ブロック・サイズが大きくなるにつれて、簡単な式による計算パフォーマンスの影響は大きくなります。ブロック・サイズと計算パフォーマンスの間の関係の詳細は、ブロック・サイズとブロック密度を参照してください。

簡単な式とは、比率やパーセンテージなどのことで、次の要件を満たすものです:

  • 異なる次元(疎または密)の値を参照しない。たとえば、簡単な式では製品-> 1月は参照できません。

  • 範囲関数を使用しない。たとえば、簡単な式では@AVGRANGE、@MAXRANGE、@MINRANGEまたは@SUMRANGEは使用できません。

  • 関係関数または財務関数を使用しない。たとえば、簡単な式では、@ANCESTVAL、@NEXT、@PARENTVAL、@SHIFT、@ACCUMまたは@GROWTHは使用できません。関係関数と財務関数の詳細なリストについては、『Oracle Essbaseテクニカル・リファレンス』を参照してください。

式による計算パフォーマンスの影響の詳細は、ボトムアップ計算とトップダウン計算を参照してください。

複雑な式の使用

複雑な式を使用する場合、次のガイドラインを適用すればパフォーマンスを改善できます:

  • 可能であれば、式を次元のメンバーに適用します。

  • 計算スクリプトでFIXコマンドを使用して、必要なデータ・ブロックのみを計算します。FIXコマンドの使用を参照してください。

  • データベースの密度(可能なデータ・ブロックに対する既存のデータ・ブロックの比率)を高くします。

    ブロック・サイズとブロック密度を参照してください。

複雑な式とは、次のいずれかの要件を満たす式のことです:

  • 異なる次元(疎または密)のメンバー(製品-> 1月など)を参照する。

  • 1つ以上の範囲関数(@AVGRANGE、@MAXRANGE、@MINRANGE、@SUMRANGEなど)を使用する。

  • 関係関数または財務関数(@ANCESTVAL、@NEXT、@PARENTVAL、@SHIFT、@ACCUMまたは@GROWTHなど)を使用する。関係関数と財務関数の詳細なリストについては、『Oracle Essbaseテクニカル・リファレンス』を参照してください。

疎次元のメンバーを適用すると、複雑な式では計算オーバーヘッドがより高くなり、そのためパフォーマンスは低下します。複雑な式が存在することにより、複雑な式を含むメンバーに関連するすべての既存のデータ・ブロックとともに、計算可能なすべてのデータ・ブロックに対してもEssbaseで計算を実行することが必要になるため、この問題が発生します。疎次元メンバーに関係関数または財務関数が存在すると、既存のデータ・ブロックとともに、計算可能なすべてのデータ・ブロックに対してEssbaseで計算の実行が必要になり、オーバーヘッドはさらに高くなります。

したがって、関係関数または財務関数を含む複雑な式では、関係関数または財務関数を含まない複雑な式よりも大きなオーバーヘッドの増加が発生します。

複雑な式による計算パフォーマンスの影響の詳細は、ボトムアップ計算とトップダウン計算を参照してください。

複雑な式によるオーバーヘッドの例を2つ示します。

  • データベースに既存のデータ・ブロックが90と、存在可能なデータ・ブロックが100ある場合は、複雑な式によるオーバーヘッドは大きくはならず、多くとも10の余分なブロックでの値の読取りと、場合によっては値の書込みが行われるのみです。

  • データベースに既存のデータ・ブロックが10と、それに対して存在可能なデータ・ブロックが100ある場合は、複雑な式がない場合に比べて、オーバーヘッドは最高10倍もかかります(アウトラインの構造やその他の要因によって異なります)。これは90もの余分なブロックが読み取られ、場合によっては書き込まれるためです。

どの場合でも、存在可能なデータ・ブロック数に対する、既存のデータ・ブロック数の比率が低くなるにつれて、計算パフォーマンスのオーバーヘッドは高くなり、パフォーマンスが低下します。

大規模なデータベース・アウトライン内の疎次元に基づく式の最適化

SET FRMLBOTTOMUP計算コマンドを使用して、大規模なデータベース・アウトライン内の疎次元での式の計算を最適化できます。このコマンドを使用すれば、それ以外の場合はトップダウンで計算される疎のメンバー式を、強制的にボトムアップで計算できます。ボトムアップ計算の強制実行を参照してください。

トップダウンの式に対してボトムアップの計算を強制すると、CALC ALLコマンドとCALC DIMコマンドを効率的に使用できます。『Oracle Essbaseテクニカル・リファレンス』のSET FRMLBOTTOMUP計算コマンドとCALCOPTFRMLBOTTOMUP構成設定に関する説明を参照してください。

疎次元のメンバーに割り当てられた定数値

疎次元のメンバーに定数を割り当てると、そのメンバーを含んでいる疎次元メンバーの各組合せに対して、Essbaseで自動的にデータ・ブロックが作成されます。

たとえば、メンバーまたは計算スクリプトの式に次の式が含まれているとします:

      California = 120;
   

この式では、「California」は疎次元のメンバーで、120は定数値です。「California」のすべての存在可能なデータ・ブロックがEssbaseで自動的に作成され、すべてのデータ・セルに値120が割り当てられます。何千ものデータ・ブロックが作成される場合もあります。パフォーマンスを向上させるには、不要な値を生成する式を作成しないでください。

  疎次元で値が必要な交差のみに定数を割り当てるには、次の例のようにFIXを使用します:

         FIX(Colas,Misc,Actual)
   California = 120;
ENDFIX
      

この例では、「Colas」は疎次元「製品」、「Actual」は密次元「シナリオ」、「Misc」は密次元「メジャー」のメンバーです。「California」(市場次元)、「Actual」(シナリオ次元)、「Misc」(メジャー次元)、「Colas」(製品次元)、および年次元のメンバーの交差には、値120が割当てられています。これは、年の特定のメンバーがスクリプトで指定されていないためです。

Sample.Basicには2つの疎次元のみ含まれているため、この例によって影響を受けるのは1つのブロックのみです。3つ以上の疎次元が存在する場合は、「California」と「Colas」のすべての疎次元の組合せに対して、必要に応じてEssbaseでブロックが作成されます。新しいブロックでは、Essbaseによりメジャーとシナリオ(値120が割り当てられるもの以外)の値が#MISSINGに設定されます。

疎次元のメンバーに割り当てられた非定数値

疎次元のメンバーに非定数値を割当てると、ブロックは「等式によるブロックの作成」の設定に基づいて作成されます。「等式によるブロックの作成」の設定は、データベース・レベルで、データベース・プロパティとして定義されます(非定数値を参照)。

計算スクリプトでは、「等式によるブロックの作成」設定を一時的に上書きできます。「West」に値がなく、「等式によるブロックの作成」を使用可能にしている場合の、次の計算による影響を考えてください:

      West = California + 120;
   

「West」のすべての子に対応するブロック値が#MISSINGの場合でも、「West」とのすべての疎メンバーの交差に不要なブロックが作成されることがあります。大規模なデータベースでは特に、不要なブロックの作成と処理に余分な処理時間が必要になります。

疎次元のメンバーに非定数値を割り当てるときに、ブロックの作成を制御するには、次のスクリプトに示すように、SET CREATEBLOCKONEQ ON | OFF計算コマンドを使用します:

      FIX (Colas);
   SET CREATEBLOCKONEQ OFF
   West = California + 120;
   SET CREATEBLOCKONEQ ON
   East = “New York” + 100;
ENDFIX
   

「等式によるブロックの作成」設定はスクリプト開始時は使用不可になっているため、「West」ブロックは「West」の子の値が存在する場合のみ作成されます。後になって、「等式によるブロックの作成」設定が使用可能になるため、「East」のすべてのブロックが作成されます。

注:

SET CREATEBLOCKONEQを使用することで影響を受けるのは、このコマンドが含まれている計算スクリプトの実行中の、ブロックの作成のみです。このコマンドで、データベース全体の「等式によるブロックの作成」設定が変更されることはありません。

次元間演算子の使用

次の状況で次元間演算子(->)を使用するときは、注意を要します:

等式の左辺

計算スクリプトのパフォーマンスを向上させるために、等式の左辺で次元間演算子が含まれた式を使用するかわりに、計算スクリプト内でFIXを使用して式の使用を制限します。

たとえば、Sample.Basicで「Jan」->「Sales」の値を5%増加させるとします。関連するメンバーの組合せのみを計算することでパフォーマンスを向上させるには、FIXコマンドを使用します:

      FIX(Jan)
   Sales = Sales * .05;
ENDFIX
   

FIXコマンドを使用すると、指定したメンバーの組合せのみに対してEssbaseで式が計算されます。この例では、「Jan」が含まれる組合せのみに対して式が計算されます。

このテクニックを、時間のかかる次元間演算子を使用するアプローチと比較してみます。前述の例の場合、データベース・アウトライン内の「Sales」メンバーに次の式を指定します:

      Sales(Sales -> Jan = Sales -> Jan * .05;)
   

Essbaseでデータベースを循環するにつれて、計算が必要なのは1月の組合せのみであっても、次元の「時間」タグが付けられたメンバー(1月、2月、3月など)を含むすべてのメンバーの組合せに対して、式が計算されます。

FIXコマンドの使用および『Oracle Essbaseテクニカル・リファレンス』を参照してください。

密次元における等式

密次元の等式で次元間演算子を使用すると、次の2つの条件がともに当てはまる場合には、必要なブロックがEssbaseで自動的には作成されません:

  • 計算結果が、密次元からの値である。

  • オペランドが、疎次元からの値である。

次の方法でブロックを作成して、パフォーマンスの問題を回避します。

  • 結果としてメンバーが、密次元からではなく疎次元から得られたことを確認します。次の例では、結果として得られたメンバー「Budget」は疎次元のメンバーです:

                FIX(Sales)
        Budget = Actual * 1.1;
    ENDFIX
    FIX(Expenses)
        Budget = Actual *  .95;
    ENDFIX
             
  • DATACOPY計算コマンドを使用して、必要なブロックを作成してから、計算します。DATACOPYを使用した既存ブロックのコピーを参照してください。

  • 密のメンバーの等式が含まれている、次のようなメンバー式を使用します。

                FIX(Sales, Expenses)
    Budget (Sales = Sales -> Actual * 1.1;
    Expenses = Expenses -> Actual * .95;)
    ENDFIX
             

式の実行レベルの管理

ブロック・ストレージ・アウトラインでの式には、それによって1つ以上のブロック内の式の実行がネストされるといった、別の式に対する依存関係がある可能性があります。このような式を、再帰式といいます。再帰式は、結果としてサーバーの異常終了を招く、大きなループや終わりのないループになることがあります。

異常終了を回避するには、CALCLIMITEFORMULARECURSION構成設定を使用して、実行レベルが31に達した式実行を停止できます『Oracle Essbaseテクニカル・リファレンス』を参照してください

ボトムアップ計算の使用

トップダウン計算は、ボトムアップ計算より効率が低くなります。これは、必要以上のブロックが計算されるためです。トップダウン計算はボトムアップ計算より効率が低くなりますが、トップダウン計算は、確実に正しい計算結果を得るために必要な場合があります。

次のトピックでは、様々な状況でどの計算を使用すべきかを説明します:

ボトムアップ計算とトップダウン計算

Essbaseでは、データベース・アウトラインのフル計算を実行するために、ボトムアップ計算またはトップダウン計算という2つの計算方法のいずれかが使用されます。デフォルトでは、Essbaseではボトムアップ計算が実行されます。

ボトムアップ計算の場合は、データベースの計算前に計算が必要なデータ・ブロックがEssbaseにより決定されます。それにより、計算の必要なブロックのみがEssbaseで計算されます。計算はブロック番号が最も小さい既存のブロックから始まり、ブロック番号が最も大きい既存のブロックに達するまで、番号順に各ブロックに対して実行されます。ブロックの計算順序を参照してください。

データベース・アウトラインに複雑なメンバー式が含まれている場合は、Essbaseで該当するメンバーに対するトップダウン計算が実行されます。

簡単な式や複雑な式の、ボトムアップ計算およびトップダウン計算との連携の詳細を理解するには、次の各項を参照してください:

ボトムアップ計算と簡単な式

簡単な式の場合は、Essbaseでボトムアップ計算を実行することで、フル計算の実行前に計算の必要のあるブロックが決定されます。たとえば、メンバーに基づく簡単な式(A = B + Cなど)では、Aは、データベース内にBまたはCが存在する場合のみ計算されます。つまり、計算の開始前に、BとCに対する式の依存関係がわかります。

トップダウン計算と複雑な式

計算の開始前に、Essbaseではデータベース・アウトラインが検索され、次元間の参照が含まれているメンバー式など、トップダウン計算が必要な複雑な式がマークされます。Essbaseではトップダウン式を持つメンバーに達すると、そのメンバーに対するトップダウン計算が行われます。

メンバーに基づく式が複雑なときは、そのメンバーに対して存在可能なすべてのブロックを調べて、既存のブロックの変更または新しいブロックの作成の必要があるかどうかを確認する必要があります。ブロックの、他のブロックに対する依存関係を計算の開始前に確認することは困難です。トップダウンの方法では、式を実行するためにEssbaseで計算対象のブロックを検索する必要があるため、計算パフォーマンスが低下します。

式をコンパイルすると、その式がトップダウンで計算される場合は、Essbaseによりアプリケーション・ログ・ファイルにメッセージが記録されます。

次のような複雑な式を考えてみます:

      A = B -> D + C -> D
   

この式を計算するために、EssbaseでAのあらゆる組合せを検討して、B -> DまたはC -> Dが存在するかどうかを判断する必要があります。

複雑な式の使用を参照してください。

ボトムアップ計算の強制実行

環境に適しているのであれば、トップダウンの式に対してボトムアップ計算を強制実行できます。

  ボトムアップ計算を強制実行するには、次のツールを使用します:

メソッド

説明が記載されている項目

場所

計算関数

式の@CALCMODE

『Oracle Essbaseテクニカル・リファレンス』

計算スクリプト・コマンド

SET FRMLBOTTOMUP

『Oracle Essbaseテクニカル・リファレンス』

essbase.cfgファイルの設定

CALCOPTFRMLBOTTOMUP

または

CALCMODE

『Oracle Essbaseテクニカル・リファレンス』

式に対してボトムアップ計算を強制実行すると、通常パフォーマンスは向上します。式に複雑な関数(範囲関数など)が含まれている場合や、式の依存関係が単純でない場合は、トップダウン計算とは異なる結果が得られる場合があります。

注意

本稼動の環境でCALCOPTFRMLBOTTOMUP設定を変更したり、計算スクリプト・コマンドSET FRMLBOTTOMUPを使用する前に、同じデータのボトムアップ計算による結果とトップダウン計算による結果を比較して、その有効性を確認してください。

キャッシュの管理によるパフォーマンスの改善

次の項では、ブロック・ストレージ・データベースで使用されるキャッシュについて説明します。集約ストレージ・キャッシュについては、集約ストレージ・キャッシュの管理を参照してください。

データベースの計算時には、Essbaseではデータベース・アウトライン内の1メンバー当たり約30バイトのメモリーが使用されます。そのため、データベースに5,000のメンバーがある場合は、Essbaseではデータベースの計算に約150 KBのメモリーが必要になります。

注:

計算スクリプトを組み合せることで、余分なメモリーの使用を回避できます。また、単一の計算スクリプトで並列計算を使用することで、パフォーマンスを向上させることができます。並列計算の使用を参照してください。

Essbaseでは、計算パフォーマンス(特に大規模な計算)を最適化するために、メモリーが使用されます。データベース・アウトラインのサイズを変更する場合を除き、使用されるメモリーの量は制御できません。ただし、メモリー・キャッシュのサイズによってEssbaseでの計算を最適化できます。

Essbaseでは、次のメモリー・キャッシュを使用して、メモリー使用率を調整します:

  • 計算機のキャッシュ。計算機のキャッシュを十分な大きさにして、計算パフォーマンスを最適化できるようにします。

  • 動的計算キャッシュ。

  • インデックス・キャッシュ。データベースが大規模な場合は、デフォルトのインデックス・キャッシュでは十分でないため、最適な計算パフォーマンスが得られません。

  • データ・キャッシュ。

  • データ・ファイル・キャッシュ。

注:

初めてデータベースを計算するときに、計算パフォーマンスのために非常に重要なものは、計算機キャッシュのサイズです。可能であれば、計算機キャッシュを、Essbaseで最適な計算機キャッシュ・オプションを使用するために十分な大きさにしてください。

キャッシュのサイズ設定を参照してください。変更を加える前に、トピック全体をお読みください。

ブロック・ロック・システムの処理

ブロックの計算時には、Essbaseではブロックおよびブロックの子が含まれるすべてのブロックがロックされます。Essbaseではブロックが計算されると、ブロックおよび子が含まれるすべてのブロックは解放されます。

デフォルトでは、Essbaseではブロックの計算時に最高100ブロックが同時にロックされます。このブロック・ロックの数は、ほとんどのデータベース計算では十分です。疎次元の式を計算する場合は、Essbaseで必要な子ブロックすべてを同時にロックできると、最も効率がよくなります。したがって、疎次元の式を計算するときに、集計する子が非常に多い場合(100を超える場合など)、100よりも大きいロック数を設定することをお薦めします。この数を増やすことで、Essbaseで必要なすべてのブロックを確実にロックでき、パフォーマンスが損われることはありません。

Essbaseによるロック動作は、分離レベル設定によって異なります。コミット・アクセスでのロックおよびアンコミット・アクセスでのロックを参照してください。

注:

疎次元での集計の場合は、子を含むすべてのブロックをEssbaseで同時にロックする必要はないため、ブロックのロックを考慮する必要はありません。

SET LOCKBLOCKおよびCALCLOCKBLOCKの使用

計算スクリプトのSET LOCKBLOCKコマンドをessbase.cfgファイルのCALCLOCKBLOCK設定とともに使用することで、ブロックの計算中にEssbaseで同時にロックできるブロックの最大数を指定できます。デフォルト設定を変更せず、計算中にデフォルトの100ブロックでは不十分な場合、要求した時間よりも長い時間が計算に必要になる場合があります。

ユーザーの同時アクセスの管理

Essbaseでは、ブロック・ロック・システムを使用して、ユーザーに対する同時アクセスが管理されます。このシステムにより、特定のデータ・ブロックを更新または計算できるのが、確実に一度に1人のユーザーのみになります。Essbaseでのブロックのロックとデータのコミットの処理方法は、分離レベル設定によって変わります。

Essbaseでデータ・ブロックが計算されると、排他ロックが生じて、他のユーザーはそのデータ・ブロックを更新または計算できなくなります。ただし、それらのユーザーが読取り専用アクセス権を持つことはできます。Essbaseでの計算が終了すると、ブロックは解放されます。他のユーザーは、適切なセキュリティ・アクセス権を持っている場合は、その後でブロックを更新できます。

ユーザーがデータ・ブロックを更新しているとき、ブロックはロックされています。データベース計算で、別のユーザーによって更新されるデータ・ブロックが必要な場合、次のような状況のいずれかになるまで計算が待機されます:

  • 分離レベル設定が「アンコミット・アクセス」の場合、データ・ブロックの解放。

  • 分離レベル設定が「コミット済アクセス」の場合、計算の完了。

Essbaseでは、計算がデータ・ブロックの解放待ちになっていることを示すメッセージは出力されません。

ロックされたブロックの解放待ちによる計算の遅延が生じないようにするには、Essbaseのセキュリティ・オプションを使用して、次のいずれかを実行します:

  • 他のユーザーに対するアクセスの拒否

  • Essbaseからのユーザーの切断

セキュリティ・オプションの詳細は、Essbaseネイティブ・セキュリティ・モードでのユーザーの切断および要求の終了およびEssbaseネイティブ・セキュリティ・モードでのパスワードとユーザー名の管理を参照してください。

Essbaseによるロックとトランザクションの処理方法については、Essbaseによるトランザクションの処理方法の理解およびデータ・ロックを参照してください。

注:

Essbaseで計算のためにブロックがロックされるときは、依存する子ブロックに排他ロックは設定されないため、別のユーザーがその子ブロックの値を更新できます。必要な場合は、前述のセキュリティ・オプションを使用して、そのような更新を防ぐことができます。

2パス計算の使用

アプリケーションに適している場合は、データベース・アウトラインで会計次元のメンバーを2パスとしてタグ付けすることで、パフォーマンスを大幅に改善できます。データと計算のニーズの組合せによっては、正確を期すために、2パスのタグ付けのかわりに計算スクリプトを使用して式を2回計算する必要がある場合があります。

次の項を使用して、2パス計算の詳細を理解してください。会計次元のメンバーを2パスとタグ付けしてパフォーマンスを改善できるかどうか、または計算スクリプトを使用して式を2回計算する必要があるかどうかを判断してください。この項では、2パス計算を使用可能にする方法や、2パス計算の計算スクリプトを作成する方法についても説明します。

2パス計算と属性メンバーの相互作用については、表18を参照してください。

2パス計算の理解

2度計算する必要があるメンバー式に2パス計算を使用すれば、正確な値を算出できます。

2パスの式は、可能な場合は常に、Essbaseによりデータ・ブロック・レベルで計算され、主計算と同時に計算されます。したがって、Essbaseにデータベース全体で特別な計算パスを実行する必要はありません。ただし、場合によっては、Essbaseには、データベース全体で特別な計算パスが必要になります。

Essbaseでの2パスの式の計算方法は、時間としてタグ付けされた次元と勘定科目としてタグ付けされた次元があるかどうかと、時間次元と会計次元の密と疎の構成によって異なります。

2パス計算の例の確認

Profit%に必要な次の計算について考えてみます:

      Profit % = Profit % Sales
   

表186は、密次元としてメジャーと年を持つデータ・ブロックのサブセットを示しているとします。メジャーは勘定科目としてタグ付けされ、年は時間としてタグ付けされています。AGGMISSG構成設定はオフ(デフォルト)になっています。

データ値は入力セルにロードされています。Essbaseにより、番号1から7が表示されたセルがこの順序で計算されます。たとえば、Profit % -> Janが最初に計算されます; Profit % -> Qtr1には、複数の集計パスがあります。

表 186. 2パス計算の例: データおよび計算順序

メジャー->年

1月

Feb

Mar

第1四半期

利益

75

50

120

5

売上

150

200

240

6

利益率

1

2

3

4, 7

注:

データベース構成によってセルの計算順序がどのように変わるかについては、セルの計算順序を参照してください。

Essbaseでは、次の計算順序が使用されます:

  1. Essbaseで、利益率-> 1月、利益率-> 2月、利益率-> 3月、および利益率->第1四半期(表内の1、2、3、4)に対して、式Profit % Salesが計算されます。

  2. Essbaseで、1月、2月および3月の値(表内の5、6)が加算され、利益->第1四半期と売上高->第1四半期が計算されます。

  3. Essbaseで、Profit % -> Jan、Profit % -> Feb、およびProfit % -> Mar(表内の7)の値が加算され、Profit % -> Qtr1が計算されます。このようなパーセンテージの加算によって値125%が得られますが、これは正しい結果ではありません。

    表 187. 2パス計算の例: 正しくない結果

    メジャー->年

    1月

    Feb

    Mar

    第1四半期

    利益

    75

    50

    120

    245 (5)

    売上

    150

    200

    240

    590 (6)

    利益率

    50% (1)

    25% (2)

    50% (3)

    0% (4)

    125% (7)

  4. データベース・アウトラインでProfit%に2パスとタグ付けすると、EssbaseではProfit % Salesの式を使用して利益率の値が再計算され、正しい結果が得られます。

    表 188. 2パス計算の例: 正しい結果

    メジャー->年

    1月

    Feb

    Mar

    第1四半期

    利益

    75

    50

    120

    245 (5)

    売上

    150

    200

    240

    590 (6)

    利益率

    50% (1)

    25% (2)

    50% (3)

    0% (4)

    125% (7)

    42% (8)

複数の計算パスの詳細については、計算パスを参照してください。

2パス計算と高機能計算の交差の理解

次の項では、2つのシナリオを詳しく説明します。高機能計算を使用している場合は、データベースの構成に合うシナリオを使用してください。それぞれのシナリオでは、Essbaseで2パスの式を正確に計算できるようにする方法が示されています。

これらのシナリオでは、高機能計算の概念を理解していることが必要です。高機能計算についての理解。を参照してください。

シナリオA

このシナリオでは、式をアウトラインに設定し、次に特定の式に適宜2パスをタグ付けして、パフォーマンスを最適化します。

2パスの式のために特別な計算パスは不要

Essbaseではデータ・ブロックの計算中に2パスの式が計算されるため、Essbaseにおいてはデータベース全体で特別な計算パスを実行する必要はありません。

クリーンとしてマークされる全データ・ブロック

計算後、すべてのデータ・ブロックは、高機能計算に備えてクリーンとしてマークされます。

アウトラインでメンバー式に2パスとタグ付けすると、Essbaseでは各データ・ブロックの計算中に2パス計算が行われます。ただし、計算スクリプトで式を繰り返すときは、式を再計算するためにEssbaseでデータ・ブロックの読取りやメモリーへの書込みが必要になります。

シナリオB

このシナリオでは、計算スクリプトを作成して式の計算を実行し、パフォーマンスを最適化します。

2パスの式における特別な計算パス

Essbaseでは、データベースが計算されてから、特別な計算パスを実行して2パスの式が計算されます。すべてのデータ・ブロックが最初のデータベース計算の後にクリーンとしてマークされても、Essbaseでは2パスの式に関連するブロックのクリーン・ステータスは無視され、これらのブロックは再計算されます。

クリーンとマークされない、2パス計算式のデータ・ブロック

初回の計算後、Essbaseでは高機能計算のためにすべてのデータ・ブロックがクリーンとしてマークされます。データベースの2回目の計算パスでは、2パスの式に必要なデータ・ブロックがEssbaseで再計算されます。ただし、2回目の計算はデータベースの部分的な計算であるため、再計算されたブロックはEssbaseでクリーンとしてマークされません。高機能計算をオンにしてデータベースを再計算すると、このようなデータ・ブロックが不必要に再計算される場合があります。

データベース構成によりEssbaseでシナリオBを使用できる場合は、2パスの式の計算に計算スクリプトを使用することを検討してください。計算スクリプトを使用すると、Essbaseではデータベースで余分な計算パスが実行されますが、計算後にすべてのデータ・ブロックがEssbaseでクリーンとしてマークされたことを確認できます。2パス計算および高機能計算用の計算スクリプトの作成を参照してください。

2パス計算タグまたは計算スクリプトの選択

勘定科目メンバーを2パスとタグ付けすると、パフォーマンスが向上する場合がありますが、アプリケーションによってはこの方法は使用できません。次の制限を確認して、最高のパフォーマンスと精度を得るために、「2パス」タグを適用するべきか、計算を2回実行する計算スクリプトを作成するべきか確認してください:

  • メンバーは、会計次元としてタグ付けされている次元の場合は、2パスとタグ付けできます。データベースでデフォルトの計算を実行すると、データベース・アウトライン内の勘定科目としてタグ付けされた次元内にある場合は、2パスとしてタグ付けされた式がEssbaseで自動的に再計算されます。

  • 次元のメンバーは、動的計算メンバーまたは動的計算および保管メンバーであれば、2パスとタグ付けできます。データ値の動的計算。を参照してください。

  • 「2パス」タグでパフォーマンスが向上する場合でも、正確な結果を得るために、計算スクリプトを使用して2パスの式を計算する必要がある場合があります。2パス計算および高機能計算用の計算スクリプトの作成を参照してください。

  • 高機能計算を効率的に使用するには、「2パス」タグではなく計算スクリプトを使用します。2パス計算と高機能計算の交差の理解を参照してください。

  • シナリオAで説明したように、データベース構成に応じてEssbaseでシナリオAを採用する場合や、式が別のデータ・ブロックの値を参照している場合は、計算スクリプトを使用して、式を2回計算する必要があります。

  • シナリオBで説明したように、データベース構成に応じてEssbaseでシナリオBを採用する場合は、計算スクリプトを使用して、2パスの式を計算した方がよい場合があります。

デフォルト計算における2パスの有効化

デフォルト設定により、デフォルト計算での2パス計算を使用可能にできます。2パス計算が使用可能になっている(デフォルト設定)データベースでデフォルト計算を実行すると、データベース・アウトライン内の勘定科目としてタグ付けされた次元にある、2パスとタグ付けされた式がEssbaseで自動的に計算されます。これは、デフォルトの計算スクリプトがカスタマイズされている場合でも同様です。

  デフォルト計算を実行するには、次のツールを使用します:

ツール

トピック

場所

Administration Services

ブロック・ストレージ・データベースの計算

Oracle Essbase Administration Services Online Help

MaxL

execute calculation

『Oracle Essbaseテクニカル・リファレンス』

ESSCMD

CALCDEFAULT

『Oracle Essbaseテクニカル・リファレンス』

  2パス計算を使用可能にするには、次のツールを使用します:

ツール

トピック

場所

Administration Services

デフォルト計算での2パスの使用

Oracle Essbase Administration Services Online Help

MaxL

alter database

『Oracle Essbaseテクニカル・リファレンス』

ESSCMD

SETDBSTATE

『Oracle Essbaseテクニカル・リファレンス』

2パス計算および高機能計算用の計算スクリプトの作成

高機能計算で2パス計算を実行するための計算スクリプトを作成して、計算をできるかぎり正確かつ高速にするには、次のような方法を使用します:

  • 2パスの式を再計算する計算スクリプト・コマンドの前に、SET UPDATECALC OFFコマンドを追加して、高機能計算を使用不可にします。高機能計算が使用可能になっている場合(デフォルト)、Essbaseではクリーンとマークされていないデータ・ブロックのみが計算されますが、高機能計算が使用可能になっているデータベースのデフォルト計算を実行すると、すべてのデータ・ブロックがクリーンとマークされるため、Essbaseで2パスの式の再計算は実行されません。

  • 計算スクリプトを使用すると、2パスの式はEssbaseで自動的には再計算されません。CALC TWOPASSコマンドを使用してください。

  • CALC ALLのデフォルトの計算を変更済で、高機能計算が使用可能な場合、最初の計算後にデータ・ブロックがクリーンとしてマークされない場合があります。高機能計算についての理解。を参照してください。また、Oracle Essbase Administration Services Online Helpの「デフォルト計算の設定」も参照してください。

データベースの最初のフル計算を実行するときに、高機能計算を使用してパフォーマンスを向上させるには、計算の要件やアウトラインの構造に応じて、次のいずれかの方法を使用します:

これら3つのオプションは、次の状況を例として使用しています:

アウトラインには勘定科目としてタグ付けされた次元があり、その次元は密次元です。すべての製品の売上のパーセンテージとして、各製品の売上を計算するとします。次の式で、次元が計算されるものとします:

      Sales % Sales -> Product
   

Essbaseで各製品のデータ・ブロックが計算されても、「Sales」->「Product」の値はまだ計算されていないため、総収入のパーセンテージとしての各製品の売上の結果は正しくありません。

大規模なインデックスでの高機能計算の使用

大規模なインデックスで高機能計算を使用する場合は、次のいずれかのオプションを使用して、最適なパフォーマンスを得ることができます。これら3つのオプションはすべて、同じタスクを実行します。

  1. 高機能計算を使用可能にします。

  2. データベース全体を計算し、データ・ブロックをクリーンとしてマークします。

  3. 高機能計算を使用不可にします。

  4. この計算がデータベースの部分的な計算であっても、再計算されたブロックはクリーンとしてマークされます。SET CLEARUPDATESTATUS AFTERコマンドを使用しない場合、Essbaseでデータ・ブロックがクリーンとしてマークされるのは、データベースのフル計算の後のみです。

  5. Essbaseでデータベースを循環して、該当するメンバー(この例では「Share of Sales」)の式のみが計算されるか、またはデータベース・アウトラインにおいて、「2パス」タグが付けられた式すべてが計算されます。

計算スクリプトの使用

高機能計算が使用可能な状態でデータベースのフル計算を実行する計算スクリプトを作成するには、このモデルを使用します:

      SET UPDATECALC ON;
CALC ALL;
SET UPDATECALC OFF;
SET CLEARUPDATESTATUS AFTER;
"Share of Sales" = Sales % Sales -> Product;
   
計算スクリプトと「2パス」タグの使用

  メンバーを2パスとタグ付けし、計算スクリプトを使用して、まずデータベース全体を計算してから、次に2パス・メンバーを計算するには:

  1. 式をデータベース・アウトラインに設定し、それに2パスをタグ付けします。

  2. 勘定科目とタグ付けされた次元内の該当するメンバー(この例では「Share of Sales」)に、式を設定します。

  3. 次のように、データベースのフル計算の次に、2パス計算を実行する計算スクリプトを作成します:

                SET UPDATECALC ON;
    CALC ALL;
    SET UPDATECALC OFF;
    SET CLEARUPDATESTATUS AFTER;
    CALC TWOPASS;
             
クライアントと計算スクリプトの使用

  クライアントからデフォルト計算を実行し、次に計算スクリプトを使用して式の計算を実行するには:

  1. 高機能計算のデフォルトを変更した場合は、使用可能にします。

  2. 表189にリストされているツールのいずれかを使用して、フル計算を実行します。

  3. この例のような計算スクリプトを使用して、高機能計算を使用不可にし、式の計算を実行します:

                SET UPDATECALC OFF;
    SET CLEARUPDATESTATUS AFTER;
    "Share of Sales" = Sales % Sales -> Product;
             

    または:

                SET UPDATECALC OFF;
    SET CLEARUPDATESTATUS AFTER;
    CALC TWOPASS;
             

    表 189. フル計算を実行する方法

    ツール

    トピック

    場所

    Administration Services

    データベースの計算

    Oracle Essbase Administration Services Online Help

    MaxL

    execute calculation

    『Oracle Essbaseテクニカル・リファレンス』

    ESSCMD

    CALCDEFAULT

    『Oracle Essbaseテクニカル・リファレンス』

高機能計算についての理解ブロック・ストレージ・データベース用の式の作成、およびブロック・ストレージ・データベース用の計算スクリプトの作成。を参照してください。

小規模なインデックスでの高機能計算の使用

  インデックスが小さい場合に高機能計算を使用するには:

  1. データベースを計算する計算スクリプトを作成します。ただし、計算済のデータ・ブロックが、Essbaseでクリーンとしてマークされないように設定します。

  2. すべてのデータ・ブロックをクリーンとしてマークし、データ・ブロックの再計算は行いません。

                SET CLEARUPDATESTATUS OFF;
    CALC ALL;
    CALC TWOPASS;
    SET CLEARUPDATESTATUS ONLY;
    CALC ALL;
             

    この例のスクリプトでは、Essbaseで次のタスクが実行されます:

  3. SET CLEARUPDATESTATUS OFFコマンドにより、計算済のデータ・ブロックはEssbaseでクリーンとしてマークされなくなります。

  4. 最初のCALC ALLコマンドにより、Essbaseでデータベースが循環されて、すべてのダーティ・データ・ブロックが計算されます。Essbaseでは、計算済データ・ブロックがクリーンとしてマークされません。データベース・アウトラインで2パスとしてタグ付けされた式は、Essbaseで自動的には再計算されません。

  5. CALC TWOPASSコマンドにより、Essbaseでデータベースが循環されて、データベース・アウトライン内の勘定科目のタグの付いた次元にある、2パスとタグ付けされた式が再計算されます。必要なデータ・ブロックが、前のCALC ALLでクリーンとしてマークされていないので、Essbaseで式が再計算されます。再計算済のデータ・ブロックはEssbaseでクリーンとしてマークされません。

  6. SET CLEARUPDATESTATUS ONLYコマンドで、Essbaseでデータ・ブロックをクリーンとしてマークしても、そのデータ・ブロックを計算しないよう設定します。このコマンドにより、計算が使用不可になります。

  7. 最後のCALC ALLコマンドにより、Essbaseでデータベースが循環され、すべてのデータ・ブロックがクリーンとしてマークされます。Essbaseでインデックスが検索され、データ・ブロックはクリーンとしてマークされます。データ・ブロックは計算されません。

2パス式のための高機能計算の無効化

  2パス式のための高機能計算を無効にするには、次のようなタスクを許可する計算スクリプトを作成します:

  • 高機能計算を使用不可にする。

  • フル計算を実行する。

  • 次のように、2パスの式を繰り返す:

                   SET UPDATECALC OFF;
    CALC ALL;
    "Share of Sales" = Sales % Sales -> Product;
                

メンバー・セット関数またはパフォーマンスの選択

「動的計算」または「動的計算および保管」タグが付いたメンバーを参照するクエリーや計算は、そのメンバーに次のいずれかの関数を含む式がある場合、同じメンバーに関するクエリーや計算よりも、かかる時間が大幅に長くなる可能性があります:

  • @CURRMBR

  • @PARENT

  • @SPARENTVAL

  • @ANCEST

  • @SANCESTVAL

パフォーマンス速度が遅い場合は、「動的計算」タグを削除するか、式からこれらの関数を削除するか、いずれかを考慮してください。

#MISSING値の集計

次元メンバーの組合せに対する値が存在しない場合は、Essbaseでは#MISSINGという組合せの値が設定されます。Essbaseでは、#MISSING値とゼロ(0)値の扱いは異なります。

#MISSINGの計算の理解

表190は、Essbaseで#MISSING値がどのように計算されるかを示しています。この表で、Xは任意の数を表しています:

表 190. Essbaseでの#MISSING値の処理方法

計算/演算

結果

X + #MISSING

X

X – #MISSING

#MISSING – X

X

-X

X * #MISSING

#MISSING

X / #MISSING

#MISSING / X

X / 0

#MISSING

#MISSING

#MISSING

X % #MISSING

#MISSING % X

X % 0

#MISSING

#MISSING

#MISSING

X == #MISSING

Xが#MISSINGでないかぎりFALSE

X != #MISSING

X < > #MISSING

Xが#MISSINGでないかぎりTRUE

Xが#MISSINGでないかぎりTRUE

X <= #MISSING

(X <= 0)

X >= #MISSING

(X >= 0)または(X == #MISSING)

X > #MISSING

(X > 0)

X < #MISSING

(X < 0)

X AND #MISSING:

Y AND #MISSING、Yは0以外の値を示します

0 AND #MISSING

#MISSING AND #MISSING

#MISSING

0

#MISSING

X OR #MISSING:

Y OR #MISSING、Yは0以外の値を示します

0 OR #MISSING

#MISSING OR #MISSING

Y

#MISSING

#MISSING

IF (#MISSING)

IF (0)

f (#MISSING)

1つの変数を持つ任意のEssbase関数に対して#MISSINGが戻されます

f (X)

fドメインでない任意のX、および(具体的に記載された場合を除き)複数の変数を持つ任意のEssbase関数に対して#MISSINGが戻されます

デフォルトでは、#MISSING値はEssbaseによってロール・アップされません。ただし、常にレベル0でデータをロードし、親レベルでロードすることがない場合は、#MISSING値の集計の設定を使用可能にする必要があります。この設定により、計算パフォーマンスが1%-30%改善されます。パフォーマンスの改善度は、データベースのサイズと構成によって異なります。

注意

データを子レベルではなく親レベルでロードする場合は、デフォルト(#MISSING値を集計しない)を有効にする必要があります。すべての子メンバーの組合せにゼロ(0)を含むその他の値が設定されている場合は、Essbaseによって子の値がロール・アップされて親の値が正確に上書きされるため、デフォルトを安全に変更できます。

集計の変更によるパフォーマンスの改善

集計を行うには、前述のいずれかの方法を使用して、#MISSING値の集計の設定を使用可能にします。達成できるパフォーマンスの改善度は、データベースの上位レベルのブロックと入力ブロックとの比率によって異なります。

  Essbaseでの#MISSING値の集計方法を変更するには、次のツールを使用します:

ツール

トピック

場所

Administration Services

計算時のMissing値の集約

Oracle Essbase Administration Services Online Help

計算スクリプト

SET AGGMISSG

『Oracle Essbaseテクニカル・リファレンス』

MaxL

alter database

『Oracle Essbaseテクニカル・リファレンス』

ESSCMD

SETDBSTATEITEM

『Oracle Essbaseテクニカル・リファレンス』

注:

#MISSING値の集計の設定を使用可能にする場合は、データ・ブロック内のセルの計算順序が変更されます。セルの計算順序を参照してください。

#MISSING値の集計の設定が使用不可にされると、次の状況では、パフォーマンスのオーバーヘッドが特に高くなる点に注意してください:

  • 入力データ・ブロックに対する計算済データ・ブロックの比率が低い場合

  • 疎次元の親レベルで多くのデータ値をロードする場合。たとえば、Sample.Basicデータベースで、疎の市場次元の「East」に多数のデータ値をロードする場合

このような状況では、パフォーマンスのオーバーヘッドは10%-30%です。計算パフォーマンスが重大な意味を持つ場合は、データベース構成またはデータ・ロード方法を再検討することをお薦めします。

Essbaseでの#MISSING値の集計方法の詳細は、#MISSING値の集計を参照してください。

#MISSINGブロックの削除

CLEARDATAコマンドを使用して、ブロック内のセルの値を#MISSINGに変更できます。データ・ブロックは削除されません。これらの余分なブロックにより、取得と計算のパフォーマンスが低下する場合があります。

#MISSINGのブロックによってパフォーマンス速度が低下している場合は、次のいずれかのアクションを実行します:

  • CLEARBLOCKコマンドを使用してデータ・ブロックを削除します。

  • データをエクスポートしてから、再度インポートします(『Oracle Hyperion Enterprise Performance Management Systemバックアップおよびリカバリ・ガイド』を参照)。

注:

データ値がすでにロードされている場合は、空のブロックを削除するとパフォーマンスが向上します。ただし、新しい値によりそのブロックの作成が必要になる場合は、データ・ロードの処理時間が長くなります。

計算の最適化に関するその他の問題の特定

計算とパフォーマンスの関係については、次の各章でも説明しています:

パス計算とSET CLEARUPDATESTATUSコマンドの関係については、『Oracle Essbaseテクニカル・リファレンス』を参照してください。

CCONVコマンドを使用して通貨を換算すると、換算後のデータ・ブロックは、高機能計算のためにダーティとしてマークされます。つまり、データベースの再計算時に、換算済のブロックがすべてEssbaseで再計算されます。高機能計算についての理解。を参照してください。