2010-07-13 51 views

回答

8
READ UNCOMMITTED 

但是,允許進程來讀數據的事務提交之前,被稱爲髒讀。 Further Reading

您可能更願意打開行版本控制,更新將創建該行的新版本,並且任何其他選擇語句都會使用舊版本,直到此版本已提交。爲此,請打開READ_COMMITTED_SNAPSHOT模式。還有更多信息here。有一個開銷涉及維護行的版本,但它刪除UPDATE/SELECT死鎖。

1

研究快照隔離 - 使用此級別的隔離是一致性和速度之間的良好折衷。我可能因爲這樣說而遭到槍殺,但我相信在這個隔離級別上遇到的僵局要困難得多。

這是否是解決死鎖問題的正確方法,完全是另一回事。

+0

死鎖更難遇到,但如果發生衝突,您將會發生大量UPDATE回滾! – 2010-07-13 17:31:48

0

使用遊標或循環更新批處理中的少量行,這可以避免SQL Server泄露到表鎖。

2

在這裏使用READ UNCOMMITTED的建議是可以的,但他們確實會側重解決爲什麼首先會陷入僵局的問題。如果你不關心臟讀,那很好,但如果你需要隔離(一致性等)的好處,那麼我建議在你的應用程序中找出適當的鎖定策略。

我沒有你的答案 - 我一直在自己制定一些策略。有關討論,請參閱this question的評論。