この項の内容:
この章の情報の一部は、ブロック・ストレージ・データベースのみに適用され、集約ストレージ・データベースとは関係がありません。集約ストレージとブロック・ストレージの比較。も参照してください。
大きなデータ・ソースをEssbaseデータベースにロードするには、数時間かかる場合があります。データ・ロードの処理時間は、次のようなアクションにかかる時間を最小限に抑えることによって短縮できます:
データ・ソースの読取りと解析
データベースへの読取りと書込み
データ・ロードのパフォーマンスを最適化するには、データベース構造の点から考えます。Essbaseでは、データはブロックごとにロードされます。疎次元メンバーの一意の組合せごとに、1つのデータ・ブロックには密次元のすべての組合せのデータが含まれています。これは、データが含まれているセルが少なくとも1つあることを前提としています。ブロックのある場所により速くアクセスするため、Essbaseではインデックスが使用されます。インデックス内の各エントリは、1つのデータ・ブロックに対応しています。疎次元および密次元、密次元と疎次元の選択、および密次元と疎次元の選択のシナリオを参照してください。
Essbaseでデータ・ソースがロードされるとき、Essbaseではデータが次の3つの主な段階で処理されます:
すべてのデータがロードされるまで、このプロセスが繰り返されます。各段階で1つ以上の処理スレッドを使用することで、Essbaseでは複数のプロセスを並列処理できます。並列データ・ロードの使用を参照してください。
この章の例は、データ・ソースに記載されているコンテンツが理解されていることを前提としています。
パフォーマンスを向上する最も効果的な戦略は、データベースへの書込みや読取りの間にEssbaseで実行する必要のあるディスク入出力の数を最小限に抑えることです。Essbaseではデータがブロックごとにロードされるため、ソース・データを物理的なブロック編成に対応するように編成すると、Essbaseで実行する必要のある物理的なディスク入出力の数が減ります。
データ・ソースを整理して、疎次元の同じ一意の組合せを持つレコードをグループ化します。この配列はデータベース内のブロックに対応します。
この章の例では、この戦略に従ってデータを編成する方法を示します。これらの例では、表184で示す、Sample.Basicデータベースのサブセットを使用しています:
次のようなデータ・ソースについて考えてみます。疎次元メンバーの組合せによってグループ化されていないため、このデータは最適化のためのソートは行われていません。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では、データ・ロードまたはその他の操作による要求に応じて、インデックスの一部がメモリーにページ・インされたりページ・アウトされたりします。ソース・データを整理して、インデックス内のエントリの順序を一致させれば、インデックスのページングが少なくてすむため、データ・ロードの速度が上がります。ページングが少なくなれば、結果として入出力操作が少なくなります。
Essbaseでは、インデックス・キャッシュ・サイズを使用して、メモリーにページ・インできるインデックスの量が決定されます。インデックス・キャッシュのサイズを調整することで、データ・ロードのパフォーマンスが向上する場合もあります。
インデックス・キャッシュ・サイズの設定を参照してください。
Essbaseサーバーからのデータ・ソースのロードは、クライアント・コンピュータからのロードよりも高速です。サーバーからデータ・ソースをロードするには、サーバーにデータ・ソースを移動してから、ロードを開始します。
サーバーからデータをロードすると、ネットワーク上で、クライアント・コンピュータからサーバー・コンピュータにデータを転送する必要がないため、パフォーマンスが向上します。
次のトピックでは、並列データ・ロードと、それによってサイトのパフォーマンスを向上させる方法について説明します。
並列データ・ロードは、複数のデータ・ファイルをEssbaseデータベースに同時にロードすることを意味します。大規模なデータ・セット(2GBのファイル10個など)を処理する場合、データ・ソースを同時にロードすることで、複数のプロセッサと高パフォーマンスのストレージ・サブシステムを備えた最新サーバーのCPUリソースやI/Oチャネルを十分に活用できます。
並列データ・ロードは、essbase.cfgの設定であるDLTHREADSPREPAREおよびDLTHREADSWRITEを使用して行われる単一ファイルのデータ・ロード・パイプライン最適化とは異なります。最適化された単一パイプライン・データ・ロードは、各ステージが1つ以上のスレッドを使用して同時に実行されるという意味において並列であり、一度にロードされるデータ・ファイルは1つのみです。
並列データ・ロードでは、サーバー側の複数の並列パイプラインとクライアント側の複数のスレッドを使用して、複数のデータ・ファイルが同時にロードされるため、データ・ロードが最新サーバーの性能に対して真に最適化されます。
並列データ・ロードを有効化するには:
使用するすべてのデータ・ソース・ファイルが一致するよう、ワイルドカード文字(*および/または?)を使用して、複数のファイルをデータ・ソースとして指定します。『Oracle Essbaseテクニカル・リファレンス』で、MaxL import dataステートメントを参照してください。
必要な場合は、並列データ・ロードによって生成されるスレッド数を制御します。
並列データ・ロードの最適化を参照してください。
並列データ・ロードには、使用されるクライアント・スレッドまたはサーバー・パイプラインの数を制限するスロットルがあります。データ・ファイルの指定が数百ファイルと一致する場合は、その数のスレッドまたはパイプラインが生成されないようにするために、スロットル制御が重要です。データ・ロード要求によって生成されるスレッドまたはパイプラインの数を制御するには、import data MaxLステートメントでmax_threads文法を使用して制限を設定します
一般的に、CPUコアを超えるパイプラインは使用しません。また、システムI/O帯域幅の使用状況を監視し、I/Oサブシステムが並列で処理できるデータ・ロード数を判断します。プロセッサおよびI/Oアクティビティの監視を参照してください
並列データ・ロードを大量に実行している場合は、essbase.cfgファイルでDLSINGLETHREADPERSTAGEをTRUEに設定することで、パフォーマンスが向上する場合があります。
データをロードする際には、プロセッサおよびI/Oアクティビティを表示できます。オペレーティング・システムごとに、システム・パフォーマンスを表示するための様々なツールがあります。たとえば、Windowsのタスク マネージャでは、プロセッサやメモリーの使用状況とプロセスを表示できます。
詳細は次のとおりです:
Windows XPの場合は、「コントロール パネル」、「管理ツール」、「パフォーマンス」の順に選択します
Windows Server 2008の場合は、「コントロール パネル」、「管理ツール」、「信頼性とパフォーマンス モニタ」の順に選択します
Windows 7の場合は、「コントロール パネル」、「管理ツール」、「パフォーマンス モニタ」、「リソース モニター」の順に選択します
UNIXで使用可能なツールは、topおよびvmstatです; iostatは、I/Oアクティビティの監視に最も一般的に使用されるユーティリティです。また、サードパーティ製のツールを使用して、システムの使用状況を表示したり分析したりすることもできます。
ブロック・ストレージ・データベースの場合、Essbaseサーバーにより、圧縮されていないデータ・ブロックを保持するためにデータ・キャッシュ・メモリーが割り当てられます。DLTHREADSWRITE構成設定を使用している場合、その設定で指定された各スレッドは、拡張ブロックのサイズに等しい、データ・キャッシュの領域を使用します。
ブロックのサイズ、スレッドの数、およびデータ・ロード中に他の同時操作で使用されるデータ・キャッシュの大きさによっては、使用できる量よりも多くのデータ・キャッシュが必要になる可能性があります。このような場合は、スレッドの数を減らすか、データ・キャッシュ・サイズを大きくします。
データ・キャッシュ・サイズの変更を参照してください。