0

データウェアハウスへのデータの自動ロードでいくつかの問題が発生しています。ロードは SQL Server エージェント ジョブによってスケジュールされますが、最近、いくつかの奇妙なクエリがそれ以上のロードを妨げていることに気付きました。

クエリの例:

SELECT DISTINCT
    sum(dbo.FAC_WITNESS_QUEUE_ACTUALS.aabandons)
FROM
    dbo.DIM_DIVISION 
INNER JOIN 
    dbo.FAC_WITNESS_QUEUE_ACTUALS ON (dbo.FAC_WITNESS_QUEUE_ACTUALS.division_sk = dbo.DIM_DIVISION.division_sk)

WHEREクエリが非常に長い時間 (1 時間以上) ロードされることを意味する句がないことに注意してください。このプロセスを強制終了すると、同じ構造であるがSUMフィールド内に別の列を持つ別のクエリが見つかります。

に記載されているテーブルにはインデックスがありませFROMん (主キーもありません)。プロセスはユーザー SSIS (ジョブの開始に使用されますが、この種のクエリを使用して実行されているジョブはありません) で開始されます。

誰がどの方向を見るべきか提案はありますか?

事前にThx

4

1 に答える 1

0

まず、キー DISTINCT がここで本当に役立つかどうかわかりません:-)

大きなテーブルで SUM または COUNT を実行すると、テーブル全体を書き込むための SQL LOCKS が出力の計算中に変更されないようにします。デフォルトでは、その間は挿入も更新も実行できません。

クエリを改善または高速化する方法はありますが、これにはインデックス付きのタイムスタンプ列が必要になるか、autoinc bigint フィールド列を追加して、毎日新しい行を合計して追加することしかできません。前日の結果<=それが私のお気に入りの方法です!

また、さまざまなLOCKINGオプションを確認することもできます 。

最後に、JOIN が非常に大きい (つまり、大きすぎる!) 可能性があり、おそらく CURSOR などの恐ろしいものを使用してそれを分割し、値をループして SQL を少し呼吸させるときに WAITFOR DELAY を追加することができます... または追加しますそれが可能ならあなたの箱にメモリを?

于 2013-07-18T07:46:43.523 に答える