データ・ロードの最適化

この項の内容:

データ・ロードの理解

疎メンバーの組合せのグループ化

データ・ソースの最小化

ソース・フィールドの最小化

アウトラインと同じ順序でのデータの配置

Essbaseサーバーからのロード

並列データ・ロードの使用

この章の情報の一部は、ブロック・ストレージ・データベースのみに適用され、集約ストレージ・データベースとは関係がありません。集約ストレージとブロック・ストレージの比較。も参照してください。

データ・ロードの理解

この項は、集約ストレージ・データベースには適用されません。

大きなデータ・ソースをEssbaseデータベースにロードするには、数時間かかる場合があります。データ・ロードの処理時間は、次のようなアクションにかかる時間を最小限に抑えることによって短縮できます:

  • データ・ソースの読取りと解析

  • データベースへの読取りと書込み

データ・ロードのパフォーマンスを最適化するには、データベース構造の点から考えます。Essbaseでは、データはブロックごとにロードされます。疎次元メンバーの一意の組合せごとに、1つのデータ・ブロックには密次元のすべての組合せのデータが含まれています。これは、データが含まれているセルが少なくとも1つあることを前提としています。ブロックのある場所により速くアクセスするため、Essbaseではインデックスが使用されます。インデックス内の各エントリは、1つのデータ・ブロックに対応しています。疎次元および密次元密次元と疎次元の選択、および密次元と疎次元の選択のシナリオを参照してください。

Essbaseでデータ・ソースがロードされるとき、Essbaseではデータが次の3つの主な段階で処理されます:

  • 入力: Essbaseでデータ・ソースの一部が読み取られます。

  • 準備: データをブロックに振り分けるための準備として、Essbaseでデータが整理されます。

  • 書込み: Essbaseにより、データがメモリーのブロックに振り分けられ、次にブロックがディスクに書き込まれます。このとき、ディスク上の正しいブロックは、疎の交差に基づくポインタで構成されるインデックスを使用して検索されます。

すべてのデータがロードされるまで、このプロセスが繰り返されます。各段階で1つ以上の処理スレッドを使用することで、Essbaseでは複数のプロセスを並列処理できます。並列データ・ロードの使用を参照してください。

この章の例は、データ・ソースに記載されているコンテンツが理解されていることを前提としています。

疎メンバーの組合せのグループ化

この項は、集約ストレージ・データベースには適用されません。

パフォーマンスを向上する最も効果的な戦略は、データベースへの書込みや読取りの間にEssbaseで実行する必要のあるディスク入出力の数を最小限に抑えることです。Essbaseではデータがブロックごとにロードされるため、ソース・データを物理的なブロック編成に対応するように編成すると、Essbaseで実行する必要のある物理的なディスク入出力の数が減ります。

データ・ソースを整理して、疎次元の同じ一意の組合せを持つレコードをグループ化します。この配列はデータベース内のブロックに対応します。

この章の例では、この戦略に従ってデータを編成する方法を示します。これらの例では、表184で示す、Sample.Basicデータベースのサブセットを使用しています:

表 184. 例の次元と値

疎、非属性次元

密次元

シナリオ(予算、実績)

メジャー(売上高、Margin、COG、利益)

製品(コーラ、ルート・ビア)

年(1月、2月)

市場(フロリダ、オハイオ)

 

注:

属性次元にはデータはロードされないので、属性次元は疎次元ですが、この項での説明とは無関係です。

次のようなデータ・ソースについて考えてみます。疎次元メンバーの組合せによってグループ化されていないため、このデータは最適化のためのソートは行われていません。Essbaseでの各レコードの読取りのたびに、疎次元の異なるメンバーの処理が必要になります。

      Jan
Actual    Cola          Ohio      Sales    25
Budget    "Root Beer"   Florida   Sales    28
Actual    "Root Beer"   Ohio      Sales    18
Budget    Cola          Florida   Sales    30
   

Essbaseでは、1つではなく4つのブロックにアクセスするため、このデータ・ロードには時間がかかります。

同じSample.Basicデータベースの最適に編成されたデータ・ソースでは、疎次元メンバーの一意の組合せによって「Actual」->「Cola」->「Ohio」の順にソートされた異なるレコードが示されます。Essbaseで1つのブロックにアクセスするのみで、これらのレコードがロードされます。

      Actual     Cola    Ohio    Jan   Sales     25
Actual     Cola    Ohio    Jan   Margin    18
Actual     Cola    Ohio    Jan   COGS      20
Actual     Cola    Ohio    Jan   Profit     5
   

1つのレコードにつき多数のセルをロードするデータ・ソースを使用できます。レコードが、一意の疎次元メンバーの組合せでグループ化されていることを確認します。次に、複数の値を指定するレコードの次元が密次元であるようにレコードを並べます。

次のデータ・ソースの例では、ヘッダー・レコードを使用して、密次元であるメジャー次元のメンバーを特定しています。データは、最初に密次元である年のメンバーごとにソートされた後、他の次元のメンバーごとに階層的にグループ化されています。各レコードには、メジャー次元の複数の値が示されています。

                                       Sales  Margin   COG  Profit
Jan Actual  Cola         Ohio       25      18    20       5
Jan Actual  Cola         Florida    30      19    20      10
Jan Actual  "Root Beer"  Ohio       18      12    10       8
Jan Actual  "Root Beer"  Florida    28      18    20       8
   

この例では、必要な行が見出しと最初のデータ行の2行であることに注目してください。前の例では、同じデータに対して4行が必要です。

ロードの前にソース・ファイル内のデータを整理する方法の詳細については、ルール・ファイルを必要としないデータ・ソースを参照してください。

データ・ソースの最小化

データ・ソースを可能なかぎり小さくします。データ・ソース内の、Essbaseで読み取るフィールドが少ないほど、データの読取りとロードに必要な時間が少なくてすみます。

データを範囲別にグループ化します。データ・ソース内の冗長性をなくすと、データ値のロード前にEssbaseで読み取る必要のあるフィールドの数が減ります。

次の例のデータ・ソースは、範囲別に編成されていません。これには、フィールドの不要な繰返しが含まれています。値はすべて「Profit」の値です。「Profit」は、該当するデータのグループの最初のみに含めるだけですみます。この例には、データ値を適切にロードするためにEssbaseで読み取る必要のある、33個のフィールドが含まれています。

      Profit
Jan     "New York"   Cola          4
Jan     "New York"   "Diet Cola"   3
Jan     Ohio         Cola          8
Jan     Ohio         "Diet Cola"   7
Feb     "New York"   Cola          6
Feb     "New York"   "Diet Cola"   8
Feb     Ohio         Cola          7
Feb     Ohio         "Diet Cola"   9
   

次の例では、同じデータが、メンバーを範囲別にグループ化することによって最適化されています。冗長性をなくすことによって、この例では、データ値を適切にロードするためにEssbaseで読み取る必要のあるフィールドが、23個のみになっています。

      Profit
Jan   "New York"   Cola          4
                   "Diet Cola"   3
      Ohio         Cola          8
                   "Diet Cola"   7
Feb   "New York"   Cola          6
                   "Diet Cola"   8
      Ohio         Cola          7
                   "Diet Cola"   9
   

Essbaseでは、最初の値4が「Jan」->「New York」->「Cola」に、次の値3が「Jan」->「New York」->「Diet Cola」にといった具合で割り当てられます。

効率的にソートされてはいますが、密次元ごとにソートされてグループ化されたデータ・ソースは、ロード・プロセスの速度を遅くする可能性のある多数の繰返しを示しています。このデータは、データを範囲別にグループ化することで、さらに最適化できます。下のような最適化されたデータ・ソースでは、冗長なフィールドがなくなり、処理時間が削減されます。

                                      Sales  Margin   COG  Profit
Jan Actual  Cola         Ohio      25      18    20       5
                         Florida   30      19    20      10
            "Root Beer"  Ohio      18      12    10       8
                         Florida   28      18    20       8
   

メンバー・フィールド範囲のフォーマットを参照してください。

ソース・フィールドの最小化

データ・ソース内のフィールドを小さくすることで、Essbaseでの読取りとロードをより高速にできます。

データ・ソース内のフィールドを可能なかぎり小さくするには、次のタスクを実行します:

  • データ・ソース内の余分な空白を削除します。たとえば、空白のかわりにタブを使用します。

  • コンピュータが生成した数値を、必要な精度に丸めます。たとえば、データ値の小数点以下の桁数が9桁で、関心があるのは2桁の場合は、その数値を丸めて2桁にします。

  • #MISSINGのかわりに#MIを使用します。

アウトラインと同じ順序でのデータの配置

この項は、集約ストレージ・データベースには適用されません。

インデックスは、アウトライン内の疎次元と同じ順序で編成されています。データ・ソース内の疎のデータの組合せをグループ化して、データ・ソースをさらに最適化するには、疎次元がアウトラインと同じ順序になるようにデータを整理します。

Essbaseでは、データ・ロードまたはその他の操作による要求に応じて、インデックスの一部がメモリーにページ・インされたりページ・アウトされたりします。ソース・データを整理して、インデックス内のエントリの順序を一致させれば、インデックスのページングが少なくてすむため、データ・ロードの速度が上がります。ページングが少なくなれば、結果として入出力操作が少なくなります。

Essbaseでは、インデックス・キャッシュ・サイズを使用して、メモリーにページ・インできるインデックスの量が決定されます。インデックス・キャッシュのサイズを調整することで、データ・ロードのパフォーマンスが向上する場合もあります。

注:

インデックス・キャッシュのサイズが、メモリー内のすべてのインデックスを含めるほど大きい場合は、データをアウトラインと同じ順序に配列してもデータ・ロードの速度には影響しません。

インデックス・キャッシュ・サイズの設定を参照してください。

Essbaseサーバーからのロード

Essbaseサーバーからのデータ・ソースのロードは、クライアント・コンピュータからのロードよりも高速です。サーバーからデータ・ソースをロードするには、サーバーにデータ・ソースを移動してから、ロードを開始します。

サーバーからデータをロードすると、ネットワーク上で、クライアント・コンピュータからサーバー・コンピュータにデータを転送する必要がないため、パフォーマンスが向上します。

次のトピックでは、並列データ・ロードと、それによってサイトのパフォーマンスを向上させる方法について説明します。

並列データ・ロードの理解

並列データ・ロードは、複数のデータ・ファイルをEssbaseデータベースに同時にロードすることを意味します。大規模なデータ・セット(2GBのファイル10個など)を処理する場合、データ・ソースを同時にロードすることで、複数のプロセッサと高パフォーマンスのストレージ・サブシステムを備えた最新サーバーのCPUリソースやI/Oチャネルを十分に活用できます。

並列データ・ロードは、essbase.cfgの設定であるDLTHREADSPREPAREおよびDLTHREADSWRITEを使用して行われる単一ファイルのデータ・ロード・パイプライン最適化とは異なります。最適化された単一パイプライン・データ・ロードは、各ステージが1つ以上のスレッドを使用して同時に実行されるという意味において並列であり、一度にロードされるデータ・ファイルは1つのみです。

並列データ・ロードでは、サーバー側の複数の並列パイプラインとクライアント側の複数のスレッドを使用して、複数のデータ・ファイルが同時にロードされるため、データ・ロードが最新サーバーの性能に対して真に最適化されます。

並列データ・ロードの有効化

  並列データ・ロードを有効化するには:

  1. 使用するすべてのデータ・ソース・ファイルが一致するよう、ワイルドカード文字(*および/または?)を使用して、複数のファイルをデータ・ソースとして指定します。『Oracle Essbaseテクニカル・リファレンス』で、MaxL import dataステートメントを参照してください。

  2. 必要な場合は、並列データ・ロードによって生成されるスレッド数を制御します。

    並列データ・ロードの最適化を参照してください。

並列データ・ロードの最適化

並列データ・ロードには、使用されるクライアント・スレッドまたはサーバー・パイプラインの数を制限するスロットルがあります。データ・ファイルの指定が数百ファイルと一致する場合は、その数のスレッドまたはパイプラインが生成されないようにするために、スロットル制御が重要です。データ・ロード要求によって生成されるスレッドまたはパイプラインの数を制御するには、import data MaxLステートメントでmax_threads文法を使用して制限を設定します

一般的に、CPUコアを超えるパイプラインは使用しません。また、システムI/O帯域幅の使用状況を監視し、I/Oサブシステムが並列で処理できるデータ・ロード数を判断します。プロセッサおよびI/Oアクティビティの監視を参照してください

並列データ・ロードを大量に実行している場合は、essbase.cfgファイルでDLSINGLETHREADPERSTAGEをTRUEに設定することで、パフォーマンスが向上する場合があります。

プロセッサおよびI/Oアクティビティの監視

データをロードする際には、プロセッサおよびI/Oアクティビティを表示できます。オペレーティング・システムごとに、システム・パフォーマンスを表示するための様々なツールがあります。たとえば、Windowsのタスク マネージャでは、プロセッサやメモリーの使用状況とプロセスを表示できます。

詳細は次のとおりです:

  • Windows XPの場合は、「コントロール パネル」、「管理ツール」、「パフォーマンス」の順に選択します

  • Windows Server 2008の場合は、「コントロール パネル」、「管理ツール」、「信頼性とパフォーマンス モニタ」の順に選択します

  • Windows 7の場合は、「コントロール パネル」、「管理ツール」、「パフォーマンス モニタ」、「リソース モニター」の順に選択します

UNIXで使用可能なツールは、topおよびvmstatです; iostatは、I/Oアクティビティの監視に最も一般的に使用されるユーティリティです。また、サードパーティ製のツールを使用して、システムの使用状況を表示したり分析したりすることもできます。

データ・キャッシュ・サイズ設定への影響

ブロック・ストレージ・データベースの場合、Essbaseサーバーにより、圧縮されていないデータ・ブロックを保持するためにデータ・キャッシュ・メモリーが割り当てられます。DLTHREADSWRITE構成設定を使用している場合、その設定で指定された各スレッドは、拡張ブロックのサイズに等しい、データ・キャッシュの領域を使用します。

ブロックのサイズ、スレッドの数、およびデータ・ロード中に他の同時操作で使用されるデータ・キャッシュの大きさによっては、使用できる量よりも多くのデータ・キャッシュが必要になる可能性があります。このような場合は、スレッドの数を減らすか、データ・キャッシュ・サイズを大きくします。

データ・キャッシュ・サイズの変更を参照してください。