35のディメンションと10のメジャーを持つSSASキューブがあります。
[〜#〜] ssms [〜#〜](SSASデータベースを右クリックして)から実行すると、データベースで「プロセスがいっぱい」になり、約1時間30分かかります。
XMLAスクリプトを介してSQLエージェントジョブからキューブ(プロセスフル)を処理している場合、約1時間20分かかります。
SSMSを使用してディメンションとメジャー(Process Full)を個別に処理すると、1時間50分かかります。
しかし、SSIS(XMLAによるDMLタスク)からディメンションとメジャーを処理している場合、5時間以上かかります。 [メモリ消費量はほぼ100%になりました]
だから私の質問は:
あらまあ.
まず第一に。あなたの場合、「デフォルトの処理」オプションを選択することをお勧めします。 Process Full alwaysを使用している場合は、すべてのデータとオブジェクトを削除し、すべてのものを再作成しています。あなたはそれらを必要としません。多くの場合、提案オプションは、ProcessDataの後にProcessIndexを使用することです。
私はSSIS内からキューブを処理しませんでしたが、おそらくSSISが何かをチェックし、データベースで何かをロックしています。最良のオプションは、XMLAを使用することです。 SSIS内からキューブを処理する場合は、処理を実行するスクリプトタスクを記述できます。ネットでスクリプトを検索できます。
クリーンなデータがあるかどうかも確認する必要があります。すべてのキーなどがある場合は、プロジェクトとデータを2回チェックします。別々にディメンションを処理している場合、データはメジャーとディメンションを比較していません。ディメンションに対応する値がないテーブルにいくつかのキーがあると確信しています。これで注文してください。ディメンションに値がなく、それが正しい場合(ソーステーブルに存在しない場合)、各ディメンションに、キー「-1」を含む1つの追加の値と、「N/A」のようなすべての値(該当なし)を追加できます。ディメンションのこのレコードを参照するために、見つからない値をポイントします。
そして最後に。大きなSSASデータベースがある場合は、パーティション分割について考えてください。
話すことはたくさんあります。特定の質問がある場合は、遠慮なく質問してください。
SSISですべてのディメンションとファクトを個別に処理する場合、複数のトランザクションで処理します。サーバーが処理できる場合、1つのトランザクションでキューブ全体を処理する方が高速です。
キューブを分割することを強くお勧めします。次に、サーバーはファクトテーブルの処理を並列化できます。これにより、パフォーマンスが最大に向上する可能性があります。