我們正在嘗試解決死鎖問題。正在回滾的事務正嘗試在另一個事務具有獨佔(X)鎖的資源上發出更新(U)鎖。據聯機叢書(http://msdn.microsoft.com/en-us/library/ms175519.aspx
),更新鎖應該防止死鎖,而不是導致它們。鎖問題 - 更新(U)鎖何時發佈?
所以,我的問題是,爲什麼/何時更新鎖應用於資源?我們對此有點困惑,因爲試圖讓更新鎖應用到will not
的資源將被事務回滾的進程更新。
感謝您的幫助。
蘭迪
我們正在嘗試解決死鎖問題。正在回滾的事務正嘗試在另一個事務具有獨佔(X)鎖的資源上發出更新(U)鎖。據聯機叢書(http://msdn.microsoft.com/en-us/library/ms175519.aspx
),更新鎖應該防止死鎖,而不是導致它們。鎖問題 - 更新(U)鎖何時發佈?
所以,我的問題是,爲什麼/何時更新鎖應用於資源?我們對此有點困惑,因爲試圖讓更新鎖應用到will not
的資源將被事務回滾的進程更新。
感謝您的幫助。
蘭迪
還有的整個宇宙「假設」的背後是什麼原因導致死鎖(我的意思是,沒有辦法從你的初始後到底發生了什麼就告訴)。可能是表鎖,可能是索引鎖;可能是你不知道的交易;可能是表頭鎖,可能是tempdb問題(非常不可能),誰知道?
我曾經發現診斷死鎖的最好方法,就像這樣:
到目前爲止,一旦我通過該XML獲得和工作,我一直能夠找出造成死鎖的原因。這是瞭解SQL內部部分可以得到的奇怪和複雜的好方法。
它是通過SQL Profiler和它生成的死鎖圖形將我引入更新鎖。我只想知道爲什麼以及在什麼情況下更新鎖定發佈。 – 2010-05-11 16:22:34
它是否嘗試更新表格的一行或多行內的一列或多列。 (請注意,即使您沒有更新,「UPDATE MyTable set colx = colx」也會發出鎖定。我不知道任何會產生更新鎖定的東西,但SQL確實包含了很多深奧的魔咒。 (有模式鎖定,但我假設你沒有得到這些。) – 2010-05-11 17:35:52
可能是沒有正確處理您的交易隔離,並且在序列化的交易模式。
你應該
使用正確的事務隔離的連接上。
有時在SQL上使用提示,如NoLock提示,當您基本上只是讀取一些數據,並且在事務中不用做任何事情。
你將需要做一些更多的研究,以找出什麼是真正鎖定,什麼隔離級別每個查詢是在等
一些有用的資源。
好的,但我想知道什麼情況下更新鎖應用? – 2010-05-11 16:08:15
什麼是與服務器進行的東西的事務隔離級別? – 2010-05-11 15:59:09