我需要在sql server表上執行un update語句,這個表被另一個進程同時使用。因爲有時會出現死鎖。至於隔離級別,你建議避免或最小化這種僵局?最佳隔離級別,以避免在Sql Server 2005中使用UPDATE語句造成死鎖
1
A
回答
8
READ UNCOMMITTED
但是,允許進程來讀數據的事務提交之前,被稱爲髒讀。 Further Reading
您可能更願意打開行版本控制,更新將創建該行的新版本,並且任何其他選擇語句都會使用舊版本,直到此版本已提交。爲此,請打開READ_COMMITTED_SNAPSHOT模式。還有更多信息here。有一個開銷涉及維護行的版本,但它刪除UPDATE/SELECT死鎖。
1
研究快照隔離 - 使用此級別的隔離是一致性和速度之間的良好折衷。我可能因爲這樣說而遭到槍殺,但我相信在這個隔離級別上遇到的僵局要困難得多。
這是否是解決死鎖問題的正確方法,完全是另一回事。
0
使用遊標或循環更新批處理中的少量行,這可以避免SQL Server泄露到表鎖。
2
在這裏使用READ UNCOMMITTED的建議是可以的,但他們確實會側重解決爲什麼首先會陷入僵局的問題。如果你不關心臟讀,那很好,但如果你需要隔離(一致性等)的好處,那麼我建議在你的應用程序中找出適當的鎖定策略。
我沒有你的答案 - 我一直在自己制定一些策略。有關討論,請參閱this question的評論。
相關問題
- 1. 避免併發刪除造成死鎖
- 2. 使用Crystal Reports的SQL Server 2005:設置事務隔離級別
- 3. UPDATE上的SQL Server死鎖
- 4. sql服務器隔離級別和死鎖
- 5. Update語句2005
- 6. SQL server 2005死鎖情況
- 7. SQL Server 2005:事務死鎖
- 8. 如何避免這兩個SQL語句之間的死鎖?
- 9. Microsoft SQL Server 2005中的默認隔離級別
- 10. SQL Server 2008 R2中的隔離級別
- 11. SQL Server快照隔離級別問題
- 12. 默認SQL Server隔離級別更改
- 13. SQL Server隔離級別問題
- 14. 由事務隔離級別分隔的併發進程死鎖
- 15. 在密鑰上的SQL Server 2005死鎖
- 16. SQL Server 2005和SELECT和UPDATE鎖定
- 17. SQL:在REPEATABLE READ隔離級別,UPDATE鎖是否保存到事務結束?
- 18. java.sql.Connection隔離級別
- 19. SELECT/UPDATE上的死鎖
- 20. 避免死鎖和防止死鎖有什麼區別?
- 21. SQL Server 2000死鎖
- 22. MySQL隔離級別,測量它們對死鎖的影響
- 23. 死鎖只有一個資源和隔離級別Serializable ...?
- 24. SQL Server - 在UPDATE語句中加入
- 25. 如何避免一個容易造成死鎖?
- 26. 如何避免簡單更新語句的死鎖?
- 27. 死鎖在SQL Server
- 28. 如何解決由於多線程中的選擇和更新語句造成的死鎖
- 29. SQL Server中鎖 - 避免重複條目
- 30. UPDATE FROM死鎖
死鎖更難遇到,但如果發生衝突,您將會發生大量UPDATE回滾! – 2010-07-13 17:31:48