トップ回答者
SQLServer2005 AnalysisService(SSAS) キューブ処理の最適オプションについて

質問
-
SQLServer2005(Standard Edition) AnalysisService(SSAS)でキューブを構築しています。
内容は顧客管理+売上管理で、顧客数の集計、売上金額の集計を行なう為に、それぞれのファクトを持っています。
また、ディメンションは顧客属性などのマスタ系が20ほど(メンバは2~20程度)となります。
データ数は顧客:約1万レコード、売上:約100万レコードで、日々の追加レコードは顧客:約100件、売上:約1000件程度です。
多少ではありますがファクトもディメンションもデータの変更が発生します。
上記のような内容でキューブ処理をジョブに登録して日次バッチ的に行なおうと思っているのですが、処理オプションで迷っています。
データベースに対して「完全処理」を行なえば問題ない、というのはわかるのですが、オブジェクトへの変更は発生しないので「完全処理」以外の
最適な処理オプションがあれば教えて頂けないでしょうか。
ちなみに処理オプションを色々と試行錯誤して「増分処理」などを行ないましたが、レコード更新があると集計結果が異常になってしまいます。
(各処理オプションの意味があまりわかっていないので、私の設定が悪いだけかもしれませんが…)
処理オプションについて、こういう場合はこのオプションを使ったほうがいい、この場合はこのオプションは使えないなど
何か情報がありましたら、是非ともご教授お願い致します。
回答
-
そうですね... Dimension の ProcessDefault ではダメですね...すいません訂正させてください。
(前の書き方を継承すると)
1.キューブを完全処理しても大して時間がかからない場合 (細かく管理するのが面倒な場合)
Database の ProcessFull
または
Cube の ProcessFull (ディメンションの変更が無ければ)
2.ディメンションデータが更新・削除されることのあるケース
Dimension の ProcessFull / ProcessData / ProcessUpdate
→ Partition / Measure Group / Cube の ProcessFull / ProcessDefault / ProcessData
3.ディメンションデータが更新・削除されない(追加のみである)ケース
上に加えて
Dimension の ProcessAdd
→ Partition / Measure Group / Cube の ProcessAdd
基本は Dimension の ProcessFull → Partition / Measure Group / Cube の ProcessFull で、
横着すると Database の ProcessFull
細かくやるなら条件により ProcessData / ProcessUpdate / ProcessAdd も使える、
ディメンション の ProcessUpdate は影響を受けるパーティションの処理をあとでちゃんとやるならお勧め、 というところでしょうか。- 回答としてマーク y-arai 2009年7月8日 1:24
-
まず参考URLです。
Microsoft SQL Server 9.0 Technical Articles - Analysis Services 2005 Processing Architecture
http://msdn.microsoft.com/en-us/library/ms345142(SQL.90).aspx次に処理オプションの訳語です(一応参考で)。
-「既定の処理」→[ProcessDefault]
-「完全処理」→[ProcessFull]
-「データの処理」→[ProcessData]
-「構造の処理」→[ProcessStructure]
-「未処理」→[ProcessClear]
-「インデックスの処理」→[ProcessIndexes]
-「増分処理」→[ProcessAdd]具体的なアドバイスは出来ないのですが、だいたい以下のような選択になるのではないでしょうか。
1.キューブを完全処理しても大して時間がかからない場合 (細かく管理するのが面倒な場合)
Database の ProcessFull
または
Cube の ProcessFull
2.ディメンションデータが更新・削除されることのあるケース
Dimension の ProcessDefault → Partition / Measure Group / Cube の ProcessDefault
または
Dimension の ProcessData → Partition / Measure Group / Cube の ProcessData
3.ディメンションデータが更新・削除されない(追加のみである)ケース
Dimension の ProcessDefault → Partition / Measure Group / Cube の ProcessDefault
または
Dimension の ProcessAdd → Partition の ProcessAdd>「増分処理」などを行ないましたが、レコード更新があると集計結果が異常になって...
これは、ディメンションで ProcessUpdate を行い Flexible 集計が削除されてしまった状況かと思われます。
対応は、
運用なら
・該当パーティションを完全処理(ProcessFull)またはインデックス処理(ProcessIndexes)する。
設定なら
・レイジー処理を構成する。
・ディメンション属性の設定(RelationshipType プロパティ)を見直し、Flexible 集計を無くす(属性の関係を Rigid にする)。
です。
面倒を避けたいなら ディメンションの ProcessUpdate を行わない方がよいでしょう。y-arai さんのケースでは、
ファクトサイズが数百万件程度ということですので、処理時間も短いと思われます。
Database の ProcessFull
または
Cube の ProcessFull
または
Dimension の ProcessDefault → Partition / Measure Group / Cube の ProcessDefault
あたりで良いのではないでしょうか。- 回答としてマーク y-arai 2009年7月7日 10:33
すべての返信
-
まず参考URLです。
Microsoft SQL Server 9.0 Technical Articles - Analysis Services 2005 Processing Architecture
http://msdn.microsoft.com/en-us/library/ms345142(SQL.90).aspx次に処理オプションの訳語です(一応参考で)。
-「既定の処理」→[ProcessDefault]
-「完全処理」→[ProcessFull]
-「データの処理」→[ProcessData]
-「構造の処理」→[ProcessStructure]
-「未処理」→[ProcessClear]
-「インデックスの処理」→[ProcessIndexes]
-「増分処理」→[ProcessAdd]具体的なアドバイスは出来ないのですが、だいたい以下のような選択になるのではないでしょうか。
1.キューブを完全処理しても大して時間がかからない場合 (細かく管理するのが面倒な場合)
Database の ProcessFull
または
Cube の ProcessFull
2.ディメンションデータが更新・削除されることのあるケース
Dimension の ProcessDefault → Partition / Measure Group / Cube の ProcessDefault
または
Dimension の ProcessData → Partition / Measure Group / Cube の ProcessData
3.ディメンションデータが更新・削除されない(追加のみである)ケース
Dimension の ProcessDefault → Partition / Measure Group / Cube の ProcessDefault
または
Dimension の ProcessAdd → Partition の ProcessAdd>「増分処理」などを行ないましたが、レコード更新があると集計結果が異常になって...
これは、ディメンションで ProcessUpdate を行い Flexible 集計が削除されてしまった状況かと思われます。
対応は、
運用なら
・該当パーティションを完全処理(ProcessFull)またはインデックス処理(ProcessIndexes)する。
設定なら
・レイジー処理を構成する。
・ディメンション属性の設定(RelationshipType プロパティ)を見直し、Flexible 集計を無くす(属性の関係を Rigid にする)。
です。
面倒を避けたいなら ディメンションの ProcessUpdate を行わない方がよいでしょう。y-arai さんのケースでは、
ファクトサイズが数百万件程度ということですので、処理時間も短いと思われます。
Database の ProcessFull
または
Cube の ProcessFull
または
Dimension の ProcessDefault → Partition / Measure Group / Cube の ProcessDefault
あたりで良いのではないでしょうか。- 回答としてマーク y-arai 2009年7月7日 10:33
-
nagasakit 様
ご回答ありがとうございます。
ファクトサイズが数百万件程度というのは、それほどの量ではないのですね。
まず、そこを勘違いしていました。
アドバイスを頂いた通り、まずは「Database の ProcessFull」でテスト運用を行なってみようと思います。
ちなみにご回答頂いた内容で
2.ディメンションデータが更新・削除されることのあるケース
3.ディメンションデータが更新・削除されない(追加のみである)ケース
のどちらも
Dimension の ProcessDefault → Partition / Measure Group / Cube の ProcessDefault
とありますが、2の場合は「ProcessFull」という認識で間違いないでしょうか。
詳細なアドバイスを頂き、大変参考になりました。
どうもありがとうございました。 -
そうですね... Dimension の ProcessDefault ではダメですね...すいません訂正させてください。
(前の書き方を継承すると)
1.キューブを完全処理しても大して時間がかからない場合 (細かく管理するのが面倒な場合)
Database の ProcessFull
または
Cube の ProcessFull (ディメンションの変更が無ければ)
2.ディメンションデータが更新・削除されることのあるケース
Dimension の ProcessFull / ProcessData / ProcessUpdate
→ Partition / Measure Group / Cube の ProcessFull / ProcessDefault / ProcessData
3.ディメンションデータが更新・削除されない(追加のみである)ケース
上に加えて
Dimension の ProcessAdd
→ Partition / Measure Group / Cube の ProcessAdd
基本は Dimension の ProcessFull → Partition / Measure Group / Cube の ProcessFull で、
横着すると Database の ProcessFull
細かくやるなら条件により ProcessData / ProcessUpdate / ProcessAdd も使える、
ディメンション の ProcessUpdate は影響を受けるパーティションの処理をあとでちゃんとやるならお勧め、 というところでしょうか。- 回答としてマーク y-arai 2009年7月8日 1:24