我打開快照隔離在我的數據庫使用下面的代碼快照上依然死鎖,ROWLOCK
ALTER DATABASE MyDatabase
SET ALLOW_SNAPSHOT_ISOLATION ON
ALTER DATABASE MyDatabase
SET READ_COMMITTED_SNAPSHOT ON
和擺脫掉大量的死鎖。
但我的數據庫仍然產生死鎖,當我需要每小時運行一個腳本來清理100,000多行時。
- 有沒有一種方法可以避免我的清理腳本中發生死鎖,我是否需要在該查詢中專門設置ROWLOCK?
- 有沒有辦法增加數據庫使用的行級鎖的數量?
- 如何提升鎖定?從行級到頁級到表級?
我刪除腳本是相當簡單:
delete statvalue
from statValue,
(select dateadd(minute,-60, getdate()) as cutoff_date) cd
where temporaryStat = 1
and entrydate < cutoff_date
現在我正在尋找快速解決方案,而是一個長期的解決方案會更好。
非常感謝, Patrikc
你能發佈死鎖跟蹤信息嗎?有關如何執行此操作的示例,請參閱http://www.dalun.com/blogs/10.13.2006.htm。 – Justin 2009-09-16 15:53:13
statValue在entryDate上有索引嗎?你看過查詢計劃嗎?我想知道你是否正在進行表掃描。 – automatic 2009-09-16 15:56:01
猜測這裏沒有足夠的空間在這裏發佈死鎖蹤跡... entrytDate沒有索引,我使用StatValueID作爲索引。 在執行計劃中有索引查找以及聚簇索引查找。 – Patto 2009-09-16 16:08:44