2012-03-18 14 views
2

ステージングデータに使用されるパーティションテーブルにロードする必要があるレコードの時間ベースのセットがあります。ステージテーブルは1日ごとに分割されます。効率を上げるために、複数の「プロセッサ」(SSISのストリーム)にわたってステージのテーブルにデータの負荷を分散しました。データがステージングされたら、データマートにロードする前に一連のデデュープ処理を実行します。しかし、私が挑戦しているのは、日付でパーティション化されたセット全体でNTILE機能を使用しているので、ステージデータがプロセッサー間で均等に分割されていないことです。データを境界全体に均等に分散する方法

だから私は

Processor 1, >= 2011-01-01 and < 2011-05-01, Rows = 200,000 
Processor 2, >= 2011-05-01 and < 2011-09-01, Rows = 3,000,000 
Processor 3, >= 2011-09-01 and < 2012-01-01, Rows = 6,000,000 
Processor 4, >= 2012-01-01 and < 2012-05-01, Rows = 6,000,000 
Processor 5, >= 2012-05-01 and < 2012-09-01, Rows = 0 

データの量がいっぱいと、プロセッサ4は、今日だけ負荷時の6,000,000を持っているもののので、指数関数的に増加している... 5つのプロセッサのため、以下の分布が表示されることがありますプロセッサ4は、合計8,000,000以上の行(レコード)を処理している可能性があります。

私の目標は、2つのプロセッサが同じパーティション(日)で競合しないようにしながら、行数に基づいてプロセッサ間でワークを均等に分散させることです。

そうは、分布はこのような何かを探すために必要があるだろう、ビジュアルとして...

Processor 1, >= 2011-01-01 and < 2011-09-01, Rows (3,200,000) 
Processor 2, >= 2011-09-01 and < 2011-11-01, Rows (3,000,000) 
Processor 3, >= 2011-11-01 and < 2012-01-01, Rows (3,000,000) 
Processor 4, >= 2012-01-01 and < 2012-01-03, Rows (3,000,000) 
Processor 5, >= 2012-01-03 and < 2012-03-18, Rows (3,000,000; 2012-03-18 contains most current data) 

すべてのフィードバックをいただければ幸いです。

答えて

0

ここにはアイデアがありますが、それはあなたの重複排除要件によって異なります。現在のパーティショニングスキームでは、数ヶ月のレコードをまとめて保管しています。ある日のすべての記録が同じパートイントオンにあれば、デュ・ダウピングは機能しますか?

もしそうなら、「ラウンドロビン」分割を1日ごとに行うことができます。

select CAST(<thedate> as int)%5 

これは、負荷分散のためのより良い動作するはずです:代わりに範囲を使用しての、数に日付を変換し、ここでのmod 5に基づいてパーティションを割り当てる例です。

関連する問題