CALCPARALLEL並列計算の使用方法
デフォルトのシリアル計算からCALCPARALLEL並列計算に変更するには、1つまたは2つの構成設定を変更してサーバーを再起動するか、計算スクリプトに命令を追加します。
CALCPARALLEL並列計算の有効化を参照してください。
次のトピックでは、並列計算の詳細について説明します。
CALPARALLELの実行可能性の分析
Essbaseでは、並列計算のCALPARALLELの方法を使用できるかどうかが、それを有効にしてある各計算パスの前に評価されます。
Essbaseでは、アウトラインおよび各計算パスに対して要求された計算が分析されます。1つの計算に複数のパスが必要となる場合があることに注意してください。一部の状況(動的計算、2パスとしてタグ付けされたメンバーの存在、または特定の種類の相互依存性が生成される計算など)では、複数のパスの必要性が生じる場合があります。計算パスを参照してください。
Essbaseによって、CALPARALLELの方法を使用した並列計算が可能であると判断された場合は、Essbaseで計算が、互いに独立した、より小さいタスクに分割されます。計算の間、Essbaseによって、より小さいタスクが同時に実行されます。
ただし、Essbaseでは、パスに関与する式の間に複雑な相互依存関係が存在する場合は、シリアル計算に分類し直されます。このような相互依存関係により、並列計算が不可能になることがあります。
FIXPARALLELの方法がご自分のユースケースにより適しているかどうかを検討してください。「FIXPARALLEL並列計算の使用方法」を参照してください。
CALCPARALLEL並列計算のガイドライン
アウトラインの構造およびアプリケーションの設計により、並列計算を有効化することで計算のパフォーマンスを改善できるかどうかが決まります。CALCPARALLEL並列計算を有効にする前に、次のガイドラインを確認して、並列計算の利点を十分に理解するために役立ててください。
-
1つ以上の式が計算に存在すると、EssbaseではCALCPARALLEL並列計算が有効な場合でもこれを使用できない場合があります。並列計算が設定されていてもシリアル計算を強制できる式の詳細は、式の制約事項を参照してください。
-
計算タスクはアウトラインの最後のnの疎ディメンションに沿って生成されます。タスクの識別に使用されるこれらの疎ディメンションは、タスク・ディメンションと呼ばれます。タスク・ディメンションの数である nは、Essbaseによって動的に選択されるか、計算コマンドSET CALCTASKDIMS (またはアプリケーション構成設定CALCTASKDIMS)を指定してこの数を上書きできます。
アウトライン内の疎ディメンションは、(MaxL文query database DBS-NAME get dbstats dimensionでレポートされるように)ディメンションの実際のサイズに基づいて、最も小さいものから最も大きいものの順に並べます。順序に関するこの推奨事項は、計算機キャッシュ・サイズの最適化のための推奨事項や、その他のアウトラインに関する推奨事項と一貫性があります。(最後の疎ディメンションよりも多くの)追加のディメンションを使用することが必要になる状況の詳細と、使用される疎ディメンションの数を増やす手順の詳細は、並列計算の追加的タスクの特定を参照してください。
-
CALCPARALLEL並列計算は、パーティション化されていないアプリケーション、および次のようなパーティション化されたアプリケーションに対して効果的です。
-
複製パーティション
-
透過パーティション(計算がターゲット・データベースで発生する場合)。計算スクリプト内のSET CALCTASKDIMSで指定される疎ディメンションの数は、1に設定する必要があります。透過パーティションでの並列計算の使用に伴う制約事項の詳細は透過パーティションの制約事項、SET CALCTASKDIMSの使用の詳細は並列計算の追加的タスクの特定を参照してください。
-
-
計算やデータ更新などの更新トランザクションは、MDX問合せやレポート・スクリプトより多くのリソースを消費する要求です。
CALCPARALLEL並列計算と他のEssbase機能との関係
次のトピックでは、CALCPARALLEL並列計算と他のEssbase機能との関係について説明します。
取得パフォーマンス
並列計算のパフォーマンスを最大化するために、最も大きい疎ディメンションをアウトラインの最後に配置すると、取得パフォーマンスの速度が低下する場合があります。問合せパフォーマンスの最適化を参照してください。
式の制約事項
いくつかの式が存在することによって、シリアル計算が強制される場合があります。次のように式を配置すると、シリアル計算が強制的に実行される可能性があります。
-
密メンバー(すべての保管済メンバー、および保管済メンバーが依存するあらゆる動的計算メンバーを含む)に対する式によって、並列計算のタスクを識別するために使用される、ディメンション内のメンバーへの依存関係が発生する場合。
-
計算スクリプト内で、@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.
透過パーティションの制約事項
透過パーティションが含まれる並列計算には次のような制約事項があります。
-
計算がターゲットで発生しないかぎり、透過パーティション間では並列計算を使用できません。
-
タスク・ディメンションを1に設定する必要があります。これを行うには、SET CALCTASKDIMS計算コマンドまたはCALCTASKDIMS構成設定を使用します。
-
複数のビットマップを使用できるように、計算機キャッシュを増やす必要があります。ビットマップ・オプションを制御する計算機キャッシュ・モードは、アプリケーション・ログで、各計算パスが開始したときの次のようなエントリを確認することで特定できます。
Multiple bitmap mode calculator cache memory usage has a limit of [50000] bitmaps.
現在のCALCPARALLEL設定の確認
使用する予定のアプリケーション設定または計算スクリプトを調べることで、並列計算が有効かどうかを確認できます。
並列計算が有効かどうかをアプリケーション・レベルで確認するには、パラメータCALCPARALLELを検索して、指定されている値を確認します。
計算を完了するために同時にタスクを実行できるスレッドの数には、1から128の間の値が指定されています。ブロック・ストレージおよび集約ストレージ・データベースは、最大128のスレッドをサポートします。
計算スクリプトで並列計算が設定されるかどうかを確認するには、SET CALCPARALLELコマンドを見つけます。計算を完了するために同時にタスクを実行できるスレッドの数には、1から128の間の値が指定されています。64ビットのプラットフォームで稼働中のブロック・ストレージおよび集約ストレージ・データベースは、最大128のスレッドをサポートします。スクリプトによって並列計算が複数回有効化または無効化される場合があるため、スクリプトは慎重に確認してください。または、スクリプトは並列計算にFIXPARALLELコマンドを使用する場合があります。
CALCPARALLEL並列計算の有効化
CALCPARALLEL並列計算を使用するには、次のいずれかの方法を使用します。
-
アプリケーション構成設定CALCPARALLELおよびCALCTASKDIMSを追加または編集します。
-
計算スクリプトでSET CALCPARALLELおよびSET CALCTASKDIMS計算コマンドを使用します。
並列計算を有効にするには、次のようにします。
ヒント:
サイトで必要な場合は、CALCPARALLELとSET CALCPARALLELを組み合せて使用できます。たとえば、CALCPARALLELをサーバー・レベルでオフとして設定し、計算スクリプトを使用して、並列計算を必要に応じて有効化および無効化できます。
並列計算の追加タスクの特定
デフォルトでは、Essbaseでは反復的な手法が使用され、CALCPARALLEL並列計算に使用するタスク・ディメンションの最適な数が選択されます。
必要に応じて、Essbaseが特定の数(n)のタスク・ディメンションを使用できるようにできます。たとえば、最後の疎ディメンションのメンバーにFIX文がある場合、アウトラインから最後の1つ前にある疎ディメンションも含めることができます。これら2つのディメンションのメンバーの一意の組合せは、それぞれが潜在的なタスクとして特定されるため、より多くのより小さいタスクが作成され、並列処理の可能性が高まり、ロード・バランシングが改善されます。
並列計算のタスク・ディメンション数を指定するには、次のようにします。
- 並列計算が有効かどうか不明な場合は、現在のCALCPARALLEL設定の確認で説明しているプロセスを使用して確認します。SET CALCPARALLELが有効化されていない(または計算スクリプトでSET CALCPARALLELが使用されていない)場合、CALCTASKDIMSは効力を持ちません。
- オプション: Essbaseでは、デフォルト数であるnのタスク・ディメンションが選択されて並列計算に使用され、この数はアプリケーション・ログ・ファイルに情報メッセージとして表示されます(例:
Parallelizing using [2] task dimensions
)。デフォルトのnの設定を上書きするには、アプリケーションのCALCTASKDIMS構成設定を追加または変更するか、計算スクリプト・コマンドSET CALCTASKDIMSを使用します。 - 計算スクリプトを実行します。
ノート:
場合によっては、EssbaseではCALCTASKDIMSまたはSET CALCTASKDIMSで指定された数より少ないディメンションを使用してタスクが特定されます。
ログ・メッセージを使用したCALCPARALLELの調整
CALCPARALLEL並列計算を使用している場合、次のログ・メッセージが表示されることがあります。
現在のタスク・ディメンション[n]の選択内容では、並列計算用タスク[n]の生成数が不十分になります。タスク・ディメンションの数を1つ増やして計算時間が向上するかどうかを確認してください(ドキュメントのSET CALCTASKDIMSのトピックを参照)。また、FIXPARALLELを使用して、CALCPARALLELとは異なるカスタム・タスク選択を作成することも考慮してください
このメッセージが表示された場合、これは並列計算の実行中に、タスクが少なくなりすぎる結果になる場合に備えて、Essbaseがタスク・ディメンションを増加しなかったことを意味します。タスクが少なくなりすぎた場合、計算スケジュールのオーバーヘッドが並列性の利点を上回る場合があります。一方、タスクが多くなりすぎた場合は、並列計算スレッドが効力を持つのに十分なタスクが存在しない場合があります。
次の可能性があるタスク・ディメンションが最初の疎ディメンションではない場合、SET CALCTASKDIMS計算コマンド(またはCALCTASKDIMS構成設定)を使用してタスク・ディメンション数を1つずつ増やし、それに伴って計算の速度が改善されるかどうかを確認することを検討してください。また、FIXPARALLELを使用して、CALCPARALLELとは異なるカスタムタスクを選択することを検討してください(FIXPARALLEL並列計算の使用方法を参照)。
現在の並列計算用タスク・ディメンション[n]数では、タスク[n]の生成数が多すぎた可能性があります。タスク・ディメンションの数を1つ減らして計算時間が向上するかどうかを確認してください(ドキュメントのSET CALCTASKDIMSのトピックを参照)。また、FIXPARALLELを使用して、CALCPARALLELとは異なるカスタム・タスク選択を作成することも考慮してください
並列計算では、タスクの数が十分にあることが、データ・スキューの影響を減らすために役立ちます。一方、タスクが多すぎる場合(適切なサイズのタスクであっても)、スケジュール・オーバーヘッドがこの利点を上回る場合があります。Essbaseでは、最適な範囲がターゲットに設定されます。前述のメッセージが表示された場合、Essbaseが、推奨される最小数のタスクに合致するように、さらに1つタスク・ディメンションの追加を試みたことを意味し、これにより、タスク数の上限を超えた可能性があります。
Essbaseによって選択された最後のタスク・ディメンションが唯一のタスク・ディメンションではない場合、SET CALCTASKDIMS計算コマンド(またはCALCTASKDIMS構成設定)を使用してタスク・ディメンション数を1つずつ減らし、それに伴って計算の速度が改善されるかどうかを確認することを検討してください。また、FIXPARALLELを使用して、CALCPARALLELとは異なるカスタムタスクを選択することを検討してください。
CALCPARALLEL並列計算のモニター
並列計算に関連するイベントをアプリケーション・ログで参照できます。
Essbaseでは、それぞれの計算パスについて、次のような複数のタイプの情報をアプリケーション・ログに書き込むことで並列計算をサポートします。
-
並列計算を有効化し、Essbaseによって並列計算が有効であると判断されている場合は、Essbaseによって、アプリケーション・ログに次のようなメッセージが書き込まれます。
Calculating in parallel with n threads
nは、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によりアプリケーション・ログ・ファイルに書き込まれるメッセージで、空の(計算が含まれない)タスクの数が示されます。
[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)場合は、データ・モデル内の密度が低いため、並列によりパフォーマンスが改善されない可能性があります。
密と疎の割当てを変更して空のタスク数を減らすことで、並列計算によるパフォーマンスの向上を促進できます。