我目前正在SQL Server 2008數據庫上進行一些實驗。更具體地講,我有一個使用數百個併發線程的執行數千個任務JDBC應用程序,每個運行數據庫以下查詢:SQL Server 2008:發生死鎖...沒有任何鎖
UPDATE from Table A where rowID='123'
但是,我得到一噸的死鎖錯誤的( SQL異常1205),只要我將隔離級別設置爲高於READ_UNCOMMITTED。即使我設置了行鎖定,表鎖定和排他鎖提示,它也會發生!即使在不使用鎖的快照隔離中,我仍然會遇到死鎖錯誤。
我通過SQL Profiler運行了一個跟蹤,以便在發生這種情況時獲取死鎖圖形,但它沒有多大用處。它顯示受害者進程連接到一個「線程池」,連接到數百個其他進程。您可以點擊此處查看:
http://i.stack.imgur.com/7rlv3.jpg
沒有人有任何線索,爲什麼發生這種情況?在過去的幾天裏,我一直在瘋狂地試圖找出答案。我目前的假設是,它與我的數據庫實例中可用的工作線程,可用內存量或與實際查詢級別鎖無關的事情有關。
謝謝!
[看過這個了嗎?](http://blogs.msdn.com/b/bartd/archive/2008/09/24/today-s-annoyingly-unwieldy-term-intra-query-parallel-thread- deadlocks.aspx)你的更新語句是否有一個並行計劃? – 2011-03-28 21:32:43
你是說''READ_UNCOMMITTED'生效時,這些死鎖**永遠不會發生?對我來說,這並不明顯,這將如何影響所顯示的'update'語句。 – 2011-03-28 21:41:08
哇!在這麼短的時間內,我並不期待這種壓倒性的反應!在READ_UNCOMMITTED下仍然會發生死鎖,但是隻有當有很多很多併發線程正在進行時(大約爲1000),纔會發生死鎖。我對這種模糊性表示歉意。 – akwok 2011-03-28 23:27:02