CALCPARALLEL並列計算
デフォルトのシリアル計算からCALCPARALLEL並列計算に変更するには、1つまたは2つの構成設定を変更してサーバーを再起動するか、計算スクリプトに命令を追加します。
手順については、「CALCPARALLEL並列計算の有効化」を参照してください。
次の各トピックでは、並列計算の詳細を説明します。
CALPARALLELの実現性分析
Essbaseでは、並列計算を有効にした各計算パスの前に、並列計算のCALPARALLELメソッドの使用が可能かどうかが評価されます。
Essbaseでは、アウトラインおよび各計算パスに対して要求された計算が分析されます。1つの計算に複数のパスが必要となる場合があることに注意してください。一部の状況では、動的計算、2パスとしてタグ付けされたメンバーの存在、または特定の種類の相互依存性が生成される計算など、複数のパスの必要性が生じます。計算パスを参照してください。
CALPARALLELメソッドを使用した並列計算が可能であるとEssbaseによって判断された場合、Essbaseによって、計算が、互いに独立した、より小さいタスクに分割されます。計算の間、Essbaseによって、より小さいタスクが同時に実行されます。
ただし、パスに参加する式間に複雑な相互依存関係がある場合、Essbaseはシリアル計算に頼ります。このような相互依存関係によって、並列計算が不可能になる場合があります。
FIXPARALLELメソッドがユース・ケースにより適しているかどうかを検討してください。「FIXPARALLEL並列計算」を参照してください。
CALCPARALLEL並列計算のガイドライン
Essbaseのアウトライン構造およびアプリケーションの設計により、並列計算を有効化することで計算のパフォーマンスを改善できるかどうかが決まります。CALCPARALLEL形式の並列計算を有効にする前に、次のガイドラインを確認して、並列計算のすべての利点を十分に理解するために役立ててください。
-
1つ以上の式が計算に存在すると、EssbaseではCALCPARALLEL並列計算が有効な場合でもこれを使用できない場合があります。 並列計算の設定に関係なくシリアル計算を強制できる式の詳細は、CALCPARALLELの並列計算と他のEssbase機能の関係を参照してください。
-
計算タスクはアウトラインの最後のnの疎ディメンションに沿って生成されます。タスクの識別に使用されるこれらの疎ディメンションは、タスク・ディメンションと呼ばれます。タスク・ディメンションの数であるnは、Essbaseによって動的に選択されるか、計算コマンドSET CALCTASKDIMS (またはアプリケーション構成設定CALCTASKDIMS)の値を指定して、この数を上書きできます。
アウトライン内の疎ディメンションは、(MaxL文query database DBS-NAME get dbstats dimensionでレポートされるように)ディメンションの実際のサイズに基づいて、最も小さいものから最も大きいものの順に並べます。順序に関するこの推奨事項は、計算機キャッシュ・サイズの最適化のための推奨事項や、その他のアウトラインに関する推奨事項と一貫性があります。追加のディメンションを使用することが必要になる場合の詳細と、使用される疎ディメンションの数を増やす手順の詳細は、並列計算の追加的なタスクの識別を参照してください。
-
CALCPARALLEL並列計算は、パーティション化されていないアプリケーション、および次のようなパーティション化されたアプリケーションに対して効果的です。
-
レプリケートされたパーティション
-
透過パーティション(計算がターゲット・データベースで発生する場合)。計算スクリプト内のSET CALCTASKDIMSで指定される疎ディメンションの数は、1に設定する必要があります。透過パーティション化での並列計算の使用に伴う制限事項の詳細はCALCPARALLELのパラレル計算とその他のEssbaseの機能の関係を参照してください。SET CALCTASKDIMSの使用の詳細は、並列計算の追加タスクの特定を参照してください。
-
-
計算やデータ更新などの更新トランザクションは、MDX問合せやレポート・スクリプトより多くのリソースを消費する要求です。
CALCPARALLEL並列計算と他のEssbase機能との関係
EssbaseキューブでCALCPARALLEL並列計算を使用している場合は、取得パフォーマンス、式、計算機キャッシュ・ビットマップおよび透過パーティションに関する制限を考慮してください。
取得パフォーマンス
並列計算のパフォーマンスを最大化するために、最も大きい疎ディメンションをアウトラインの最後に配置すると、取得パフォーマンスの速度が低下する場合があります。
式の制約事項
いくつかの式が存在することによって、シリアル計算が強制される場合があります。次のように式を配置すると、シリアル計算が強制的に実行される可能性があります。
-
密メンバー(すべての保管済メンバー、および保管済メンバーが依存するあらゆる動的計算メンバーを含む)に対する式によって、並列計算のタスクを識別するために使用される、ディメンション内のメンバーへの依存関係が発生する場合。
-
計算スクリプト内で、@VAR、@ARRAY、@XREFまたは@XWRITEを使用して宣言された変数への参照が式に含まれる場合。かわりに、パラレル計算にFIXPARALLELを使用することを検討してください。
-
@XREFを使用する疎ディメンション・メンバーの式で、疎のメンバーのディメンションがフル計算される場合。@XREFは、バッチ計算中に他の保管済メンバーに依存しない密の動的計算メンバーにある場合、シリアル計算を強制実行しません。
-
メンバーの式によって循環的な依存が発生する場合。たとえば、メンバーAにメンバーBを参照する式があり、メンバーBにメンバーCを参照する式があり、メンバーCにはメンバーAを参照する式があるような場合。
-
密または疎のメンバーに対する式が、並列処理のタスクの特定に使用されるディメンションの1つ以上のメンバーに依存する場合。
-
疎ディメンション・メンバーの式に、他の疎ディメンションのメンバーへの参照が含まれる場合。
並列計算を妨げる可能性のある式を使用する必要がある場合は、FIXPARALLELを使用することを検討してください。または、式のメンバーを動的計算としてマークするか、その式を計算のスコープから除外できます。式によって並列計算が妨げられるかどうかを確認するには、アプリケーション・ログを確認します。関連するエラー・メッセージは、CALCPARALLEL並列計算の監視を参照してください。
計算機キャッシュ
計算パスの開始時に、Essbaseで計算機キャッシュのサイズと並列性の度合いが確認され、その後、最大のパフォーマンスを得るための適切な計算機キャッシュのビットマップ・オプションが使用されます。そのため、並列計算に使用されるビットマップ・オプションは、シリアル計算に使用されるものとは異なる場合があります。
たとえば、Essbaseでシリアル計算が実行され、複数のビットマップと単一のアンカー・ディメンションが使用されるとします。計算機キャッシュ・サイズを明示的に変更しないと、Essbaseでは単一のビットマップと単一のアンカー・ディメンションのみを使用して並列計算が実行される可能性があります。
ビットマップ・オプションを制御する計算機キャッシュ・モードは、アプリケーション・ログで、各計算パスが開始したときの次のようなエントリを確認することで判断できます。
Multiple bitmap mode calculator cache memory usage has a limit of [50000] bitmaps.複数ビットマップ・モードでパラレル計算を使用すると、メモリー使用量が多い場合があります。その場合は、構成設定PARCALCMULTIPLEBITMAPMEMOPTを使用して、複数のビットマップ・モードでのメモリーの使用を最適化できます。この設定は、MULTIPLEBITMAPMEMCHECKとともに使用することも、別個に使用することもできます。PARCALCMULTIPLEBITMAPMEMOPTを有効にするには、アプリケーション構成に次を追加します。
PARCALCMULTIPLEBITMAPMEMOPT TRUE透過パーティションの制約事項
透過パーティションが含まれる並列計算には次のような制約事項があります。
-
計算がターゲットで発生しないかぎり、透過パーティション間では並列計算を使用できません。
-
タスク・ディメンションを1に設定する必要があります。これを行うには、SET CALCTASKDIMS計算コマンドまたはCALCTASKDIMS構成設定を使用します。
-
複数のビットマップを使用できるように、計算機キャッシュを増やす必要があります。ビットマップ・オプションを制御する計算機キャッシュ・モードは、アプリケーション・ログで、各計算パスが開始したときの次のようなエントリを確認することで特定できます。
Multiple bitmap mode calculator cache memory usage has a limit of [50000] bitmaps.
現在のCALCPARALLEL設定のチェック
EssbaseキューブでCALCPARALLELスタイルの並列計算が有効かどうかを調べるために、使用する予定のアプリケーション構成または計算スクリプトのいずれかをチェックできます。
CALCPARALLELスタイルの並列計算がアプリケーション・レベルで有効になっているかどうかを確認するには、構成パラメータCALCPARALLELを検索して、指定されている値を確認します。
または、キューブ(または計算スクリプト)で並列計算にFIXPARALLELコマンド・ブロックを使用することもできます。
CALCPARALLELの場合、計算を完了するために同時にタスクを実行できるスレッドの数には、1から128の間の値が指定されています。64ビットのプラットフォームで稼働中のブロック・ストレージ(BSO)および集約ストレージ(ASO)データベースは、最大128のスレッドをサポートします。
計算スクリプトでCALCPARALLELスタイルの並列計算が設定されているかどうかを確認するには、「SET CALCPARALLEL」コマンドを探します。スクリプトによって並列計算が複数回有効化または無効化される場合があるため、スクリプトは慎重に確認してください。
CALCPARALLEL並列計算の有効化
EssbaseキューブでCALCPARALLELスタイルの並列計算を使用するには、アプリケーションに対して有効にするか、1つ以上の計算スクリプトに対してのみ実装できます。
EssbaseキューブでCALCPARALLEL並列計算を使用するには、次のいずれかの方法を使用します:
-
アプリケーション構成設定CALCPARALLELおよびCALCTASKDIMSを追加または編集します。
-
計算スクリプトでSET CALCPARALLELおよびSET CALCTASKDIMS計算コマンドを使用します。
次のワークフローに従って、CALCPARALLEL形式のパラレル計算を有効にします。
ヒント :
サイトで必要な場合は、CALCPARALLELとSET CALCPARALLELを組み合せて使用できます。たとえば、CALCPARALLELをサーバー・レベルでオフとして設定し、計算スクリプトを使用して、並列計算を必要に応じて有効化および無効化できます。
並列計算の追加タスクの識別
デフォルトでは、Essbaseでは反復的な手法が使用され、CALCPARALLEL並列計算に使用するタスク・ディメンションの最適な数が選択されています。
たとえば、最後の疎ディメンションのメンバーにFIX文がある場合、アウトラインから最後の1つ前にある疎ディメンションも含めることができます。これら2つのディメンションのメンバーの一意の組合せは、それぞれが潜在的なタスクとして特定されるため、より多くのより小さいタスクが作成され、並列処理の可能性が高まり、ロード・バランシングが改善されます。
並列計算のタスク・ディメンション数を指定するには、次のようにします。
- 並列計算が有効かどうか不明な場合は、現在のCALCPARALLEL設定のチェックで説明するプロセスを使用して確認します。CALCPARALLELが有効化されていない(または計算スクリプトでSET CALCPARALLELが使用されている)場合、CALCTASKDIMSは効力を持ちません。
- オプション: Essbaseでは、デフォルト数であるnのタスク・ディメンションが選択され並列計算に使用され、この数はアプリケーション・ログ・ファイルに情報メッセージとして出力されます(例:
Parallelizing using [2] task dimensions)。デフォルトのnの設定を上書きするには、アプリケーションのCALCTASKDIMS構成設定を追加または変更するか、計算スクリプト・コマンドSET CALCTASKDIMSを使用します。 - 計算スクリプトを実行します。
場合によっては、EssbaseではCALCTASKDIMSまたはSET CALCTASKDIMSで指定された数より少ないディメンションを使用してタスクが特定されます。
ログ・メッセージを使用したCALCPARALLELのチューニング
ログ・メッセージを慎重に分析すると、Essbaseによって並列計算プロセスがタスクにどのように分割されるかの最適化に役立ちます。
CALCPARALLEL並列計算を使用している場合、次のログ・メッセージが表示されることがあります。
Current selection of task dimensions [n] will generate insufficient number of tasks [n] for parallel calculation. See whether calculation time can be improved by increasing the number of task dimensions by one (see SET CALCTASKDIMS topic in the documentation). Also, consider using FIXPARALLEL to make custom task selections that are different from CALCPARALLEL.
このメッセージが表示された場合、これは並列計算の実行中に、タスクが少なくなりすぎる結果になる場合に備えて、Essbaseがタスク・ディメンションを増加しなかったことを意味します。タスクが少なくなりすぎた場合、計算スケジュールのオーバーヘッドが並列性の利点を上回る場合があります。ただし、タスクが大きすぎると、並列計算スレッドを処理するのに十分なタスクがない場合があります。
次の可能性があるタスク・ディメンションが最初の疎ディメンションではない場合、SET CALCTASKDIMS計算コマンド(またはCALCTASKDIMS構成設定)を使用してタスク・ディメンション数を1つずつ増やし、それに伴って計算の速度が改善されるかどうかを確認することを検討してください。また、FIXPARALLELを使用して、CALCPARALLELとは異なるカスタム・タスクの選択を行うことを検討してください(FIXPARALLEL並列計算を参照)。
Current number of task dimensions [n] for parallel calculation might have caused too many tasks [n] to be generated. See whether calculation time can be improved by decreasing the number of task dimensions by one (see SET CALCTASKDIMS topic in the documentation). Also, consider using FIXPARALLEL to make custom task selections that are different from CALCPARALLEL.
並列計算では、タスクの数が十分にあることが、データ・スキューの影響を減らすために役立ちます。一方、タスクが多すぎる場合(適切なサイズのタスクであっても)、スケジュール・オーバーヘッドがこの利点を上回る場合があります。Essbaseでは、最適な範囲がターゲットに設定されます。前述のメッセージが表示された場合、Essbaseが、推奨される最小数のタスクに合致するように、さらに1つタスク・ディメンションの追加を試みたことを意味し、これにより、タスク数の上限を超えた可能性があります。
Essbaseによって選択された最後のタスク・ディメンションが唯一のタスク・ディメンションではない場合、SET CALCTASKDIMS計算コマンド(またはCALCTASKDIMS構成設定)を使用してタスク・ディメンション数を1つずつ減らし、それに伴って計算の速度が改善されるかどうかを確認することを検討してください。また、FIXPARALLELを使用して、CALCPARALLELとは異なるカスタム・タスク選択を行うことを検討してください。
CALCPARALLEL並列計算のモニター
並列計算に関連するイベントをアプリケーション・ログで参照できます。Essbaseでは、それぞれの計算パスについて、いくつかのタイプの情報をアプリケーション・ログに書き込むことによって並列計算をサポートします。
並列計算を使用できる場合
並列計算を有効化し、Essbaseによって並列計算が有効であると判断されている場合は、Essbaseによって、アプリケーション・ログに次のようなメッセージが書き込まれます。
Calculating in parallel with n threadsnは、CALCPARALLELまたはSET CALCPARALLELで指定された、同時タスクの数を表します。
算式のために並列計算を使用できない場合
並列計算の使用を妨げる(シリアル計算を強制的に実行する)式については、Essbaseにより、アプリケーション・ログに次のメッセージが書き込まれます。
Formula on (or backward dependence from) mbr memberName prevents calculation from running in parallel.memberNameは、関連する式が存在するメンバーの名前を表します。アプリケーション・ログでこのようなメッセージを確認し、式を削除することを検討でき、また、可能な場合は、関連するメンバーを動的計算としてタグ付けして、それらのメンバーが計算パスで機能しないようにすることを検討できます。
Essbaseにより次のメッセージがアプリケーション・ログに書き込まれ、同時に実行可能なタスクの数が示されます(データに基づき、CALCPARALLELまたはSET CALCPARALLELの値には基づかない)。
Calculation task schedule [576,35,14,3,2,1]このメッセージ例は、576のタスクを同時に実行できることを示しています。576のタスクが完了した後、続いてさらに35のタスクを実行でき、以降同様に続きます。
並列計算の優位性は、最初のいくつかのステップで最も大きく、同時に実行されるタスクが少なくなると、それに応じて減少します。
並列性の度合いは、タスク・スケジュールにあるタスクの数に依存します。この数が多いほど、並行して実行できるタスク数が増え、パフォーマンスが向上します。
パラレル計算の結果が空のタスクになる場合
Essbaseによりアプリケーション・ログ・ファイルに書き込まれるメッセージで、空の(計算が含まれない)タスクの数が示されます。
Info(1012681) Empty tasks [291,1,0,0,0,0]前述の例では、レベル0では291のタスクが空であることがEssbaseにより示されます。
計算タスク・スケジュールで指定されたタスク数に対する空のタスク数の比率が50%を超える(たとえば、291 / 576)場合は、データ・モデル内の密度が低いため、並列によりパフォーマンスが改善されない可能性があります。
密と疎の割当てを変更して空のタスク数を減らすことで、並列計算によるパフォーマンスの向上を促進できます。