2011-11-29 17 views
1
Set rowcount 50000 
declare @i int 
select @i = 1 
WHILE (@i > 0) 
    BEGIN 
    DELETE table1 
    FROM table1 (index index1) 
    WHERE 
    HIST_Timestamp < '2011/11/26' 
    select @i = @@rowcount 
    END 

該查詢有時會遇到死鎖情況並終止..無法弄清楚發生了什麼問題..請幫助我!在使用rowcount刪除查詢時進入死鎖

回答

1

死鎖而事務B上已經被交易A.

鎖定。如果你真的想知道爲什麼等待記錄發生在事務A鎖定了一個記錄,則必須等待事務B解鎖的記錄,僵局正在發生的事情,你可以用這個命令做到這一點: sp_configure "print deadlock information", 1

創建用於查詢的有用index允許delete語句中使用頁面或行鎖,從而改善對錶的併發訪問。如果爲刪除事務創建index是不可能的,則可以使用頻繁提交事務語句來執行遊標中的操作,以減少頁面鎖定的數量。