2017-03-10 9 views
0

私が取り組んでいるプロジェクトでは、2つのストアドプロシージャ(sp)の実行中にいくつかの速度低下が検出されています。 もっと正確に言えば、両方がほぼ同じ瞬間に同じテーブルでいくつかのステートメントを実行しようとするときに起こります。 2つのステートメントは次のとおりSQL Serverの異なるストアドプロシージャから同じテーブルを削除して読み込み中に遅くなる

  • はである一時テーブル上の更新は、SPのA(IN削除テーブルと結合する
  • (これはSP Aに起こる)テーブルから単一の行を削除しますこれはspで発生します。B)

これらのslowdonwが発生すると、文が終了するまでに数分かかることがあります。

結合および削除where句に使用されるフィールドはインデックスされていますが、これらのフィールドのいずれもクラスタ化インデックスではなく、別のフィールドにあります。

SP

...other code... 
DELETE OrderItems 
OUTPUT @LogId, DELETE.OrderId, ...[Other colums] 
INTO OrderItemsLog(LogId, OrderId, ...[Other columns]) 
WHERE OrderId = @OrderId 
...other code... 

SP Bのこれらの二つの文がほぼ同じ瞬間に実行される

...other code... 
UPDATE [Update some columns on the temp table] 
FROM #TempOrderItems toi 
    JOIN OrderItems oi ON toi.OrderId = oi.OrderId AND toi.OrderItemId = oi.OrderItemId 
...other code... 

、速度低下がある:ここ

はコードの一例です。

誰かが理由を知っていますか... ...?

TNX

+0

データベース内で何が起こっているのかを確認する必要があります、デッドロックなどがあります。ちょうどコードを読むことに基づいて、あなたはあまりできません。 –

答えて

0

私がしようとすると、この次の情報収集になります。 は&がsys.sysprocessesからの情報を待ってブロックを。 デッドロック:幸運なことにDBAが許可する場合、DBCC TRACEON(1204,1222)を試してみると、SQLログにデッドロックが表示されます sys.dm_tran_locks - ロックエスカレーションが発生することがあります。削除を実行すると高くなります。 10秒ごとに出力されるので、時間の経過とともに何が起こるかを確認できます(Foglightまたはこのツールはデフオヘルプになります)

関連する問題