事務中的隔離級別
回答
更新的各種隔離級別:澄清和更正的說明。
隔離級別僅表示您的事務有多少受其他併發事務影響。隔離級別越高,影響越小。
這些努力將在cpu負載,內存負載以及可能提交延遲中顯現出來。另外,在較高的隔離級別中寫入衝突可能更有可能,這可能意味着您必須中止事務並重試整個事務。 (這隻影響執行更新或插入的事務,而不影響只執行選擇的事務)。
通常,經驗法則是使用最低級別,它爲應用程序提供所需的一致性。
Read Committed模式提供的部分事務隔離適用於許多應用程序,並且此模式使用起來快速且簡單;但是,對所有情況來說都是不夠的。執行復雜查詢和更新的應用程序可能需要比Read Committed模式提供的更嚴格一致的數據庫視圖。
可串行化模式提供了嚴格的保證,每個事務都可以看到數據庫的完全一致的視圖。但是,當併發更新使得不可能維持串行執行的錯覺時,應用程序必須準備好重試事務。由於重做複雜事務的成本可能很高,因此只有在更新事務包含足夠複雜的邏輯以便在讀取已提交模式下可能會給出錯誤答案時,才推薦使用可序列化模式。最常見的情況是,當事務執行幾個必須看到數據庫相同視圖的連續命令時,Serializable模式是必需的。
(http://www.postgresql.org/docs/8.4/interactive/transaction-iso.html是非常好的。)
對不起,但第一段是錯誤的。隔離級別控制當前事務將看到的其他事務,以及當前事務將創建多少個鎖。它不影響另一個事務看到什麼 - 它是控制它所看到的其他事務的隔離級別。 – 2009-07-07 19:28:47
您的隔離級別與其他隔離級別的聯合決定它可能更正確。 – Christopher 2009-07-07 21:28:17
如果你不知道在隔離級別的差異,然後堅持到默認。改變關卡可能會產生特殊的副作用。 99%的應用程序在默認情況下都可以。
默認情況下,我認爲隨着每個JDBC驅動程序的不同,儘管像JPA這樣的框架可能會強制執行它,但我無法立即回想起來。最常見的默認值是read_committed,因爲它提供了事務安全性和併發性之間最佳的通用平衡。如果您選擇不同的隔離級別,則會犧牲安全性或併發性,並且必須注意妥協。
這是什麼問題?
隔離級別定義DBMS使用的鎖定類型和鎖定粒度。在數據庫管理系統的環境中,鎖定是至關重要的,因爲交易是由許多用戶同時執行的。更高的事務隔離 - 比如SERIALIZABLE - 更安全 - 您可以消除髒讀取和幻影更新 - 但由於序列化事務限制併發性並因此妨礙可伸縮性而施加懲罰。
怎麼辦?對應用程序進行構建,以便邏輯在絕對需要時正確使用序列化事務來限制「不良數據」的可能性,但並非如此,從而不會不必要地阻礙併發。
- 1. SET事務隔離級別
- 2. EJB事務隔離級別
- 3. Spring事務隔離級別vs數據庫隔離級別的優先級
- 4. SELECTs的事務隔離級別
- 5. MySQL事務隔離級別破壞?
- 6. 事務隔離級別數量龐大
- 7. NOLOCK與事務隔離級別
- 8. ActiveJob/Resque髒讀。事務隔離級別
- 9. 事務隔離級別問題
- 10. 事務,設置隔離級別
- 11. 由事務隔離級別分隔的併發進程死鎖
- 12. 事務隔離級別 - Azure SQL數據庫中的表鎖定
- 13. 在基於Spring註釋的事務中設置隔離級別
- 14. 如何將事務隔離級別設置爲SQLite中的ReadUncommitted?
- 15. mysql中的Django事務隔離級別&postgresql
- 16. 金融應用程序中的事務隔離級別
- 17. SQL Server中的事務隔離級別可重複讀取
- 18. java.sql.Connection隔離級別
- 19. mysql隔離級別
- 20. 設置Berkeley DB Java版中分佈式事務(XA)的事務隔離級別
- 21. 防止事務一致性(事務類型;事務隔離級別)
- 22. 如何在SQLAlchemy for PostgreSQL中設置事務隔離級別?
- 23. 在Squeryl中設置事務隔離級別
- 24. 如何在UIB中使用Firebird事務隔離級別?
- 25. 具有auto_incremement字段的JDBC事務的隔離級別
- 26. 如何設置Postgres數據源的事務隔離級別
- 27. 事務隔離級別很好的解釋
- 28. 可序列化的事務隔離級別不適用於我
- 29. 安全遞增ID所需的事務隔離級別
- 30. 如何設置事務隔離級別的整數值
我們可以添加什麼文章已經說了什麼? – skaffman 2009-07-07 18:42:43