2009-07-07 104 views
0

我想知道什麼纔是達到事務隔離級別的最佳方式? This is a good link可用的ISOLATION級別。事務中的隔離級別

塊引用這將是很好,如果有人可以解釋一個交易

+1

我們可以添加什麼文章已經說了什麼? – skaffman 2009-07-07 18:42:43

回答

3

更新的各種隔離級別:澄清和更正的說明。

隔離級別僅表示您的事務有多少受其他併發事務影響。隔離級別越高,影響越小。

這些努力將在cpu負載,內存負載以及可能提交延遲中顯現出來。另外,在較高的隔離級別中寫入衝突可能更有可能,這可能意味着您必須中止事務並重試整個事務。 (這隻影響執行更新或插入的事務,而不影響只執行選擇的事務)。

通常,經驗法則是使用最低級別,它爲應用程序提供所需的一致性。

Read Committed模式提供的部分事務隔離適用於許多應用程序,並且此模式使用起來快速且簡單;但是,對所有情況來說都是不夠的。執行復雜查詢和更新的應用程序可能需要比Read Committed模式提供的更嚴格一致的數據庫視圖。

可串行化模式提供了嚴格的保證,每個事務都可以看到數據庫的完全一致的視圖。但是,當併發更新使得不可能維持串行執行的錯覺時,應用程序必須準備好重試事務。由於重做複雜事務的成本可能很高,因此只有在更新事務包含足夠複雜的邏輯以便在讀取已提交模式下可能會給出錯誤答案時,才推薦使用可序列化模式。最常見的情況是,當事務執行幾個必須看到數據庫相同視圖的連續命令時,Serializable模式是必需的。

http://www.postgresql.org/docs/8.4/interactive/transaction-iso.html是非常好的。)

+2

對不起,但第一段是錯誤的。隔離級別控制當前事務將看到的其他事務,以及當前事務將創建多少個鎖。它不影響另一個事務看到什麼 - 它是控制它所看到的其他事務的隔離級別。 – 2009-07-07 19:28:47

+0

您的隔離級別與其他隔離級別的聯合決定它可能更正確。 – Christopher 2009-07-07 21:28:17

1

如果你不知道在隔離級別的差異,然後堅持到默認。改變關卡可能會產生特殊的副作用。 99%的應用程序在默認情況下都可以。

默認情況下,我認爲隨着每個JDBC驅動程序的不同,儘管像JPA這樣的框架可能會強制執行它,但我無法立即回想起來。最常見的默認值是read_committed,因爲它提供了事務安全性和併發性之間最佳的通用平衡。如果您選擇不同的隔離級別,則會犧牲安全性或併發性,並且必須注意妥協。

0

這是什麼問題?

隔離級別定義DBMS使用的鎖定類型和鎖定粒度。在數據庫管理系統的環境中,鎖定是至關重要的,因爲交易是由許多用戶同時執行的。更高的事務隔離 - 比如SERIALIZABLE - 更安全 - 您可以消除髒讀取和幻影更新 - 但由於序列化事務限制併發性並因此妨礙可伸縮性而施加懲罰。

怎麼辦?對應用程序進行構建,以便邏輯在絕對需要時正確使用序列化事務來限制「不良數據」的可能性,但並非如此,從而不會不必要地阻礙併發。