2017-03-10 18 views
0

在我正在開發的項目中,我們在執行兩個存儲過程(sp)期間檢測到了一些減速。 更確切地說,當兩者都嘗試在幾乎同一時刻在同一張表上運行一些語句時發生。 這兩種說法是:從SQL Server中的不同存儲過程刪除和讀取同一張表時的影響減少

  • 從表中刪除單行(這種情況發生在SP A)
  • 作出臨時表的更新,這與在SP上的刪除表連接(這發生在SP B)

當這些slowdonws發生時,它也可能需要幾分鐘的時間來終止語句。

用於連接和刪除where子句的字段被索引,但沒有一個是聚簇索引,它在另一個字段上。

下面是代碼的示例:

SP A

...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等待信息。 死鎖:如果幸運(如果你的數據庫管理員允許)嘗試DBCC TRACEON(1204,1222),那麼你會看到SQL日誌中的死鎖 sys.dm_tran_locks - 你可能會看到一些鎖升級發生 - 例如,如果SQL決定鎖定頁面或運行刪除時更高。 最好的,如果你可以有這些輸出每10秒左右,所以你可以看到會發生什麼隨着時間的推移(Foglight或像這樣的工具defo的幫助)

相關問題