2011-04-20 82 views
5

在什麼情況下,我們使用SERIALIZABLE隔離級別?我在網站上看到一些答案,說當你想要完全隔離交易時,我們通常會這樣做。Seralization隔離級別的實際用途?

我從你自己的經驗中想知道的是,當你在項目中使用過這個功能時,或者你已經看到這個功能在其他項目中使用,以及沒有得到滿足的具體要求是什麼通過其他隔離級別?

回答

6

SERIALIZABLE當你建立複雜的報表需要幾個查詢是非常有用的。

READ COMMITTEDREPEATABLE READ查詢可以看到在啓動的事務和它們運行的​​時刻之間所做的更改。

pg_dump,該PostgreSQL dump工具,與發行SET TRANSACTION ISOLATION LEVEL SERIALIZABLE,開始它的工作,以保證數據庫的狀態被棄置是該實用程序運行時刻,並以數據庫的後續變化無法與干擾傾倒。如果你想正確的併發負載的一個簡單證明

2

SERIALIZABLE交易是有用的。由於SQL標準中的可序列化事務隔離級別的定義(因爲SQL-92)是任何併發的可序列化事務集的行爲必須與某些序列(一次一個)執行次序一致,所以交易可以被證明在單獨運行時做正確的事情,將作爲任何混合的可序列化交易的一部分來做正確的事情。

有這種保護的成本 - 交易必須被阻止或有時回滾重試,以確保可序列化事務隔離和信息必須跟蹤,以確定何時有必要採取這樣的行動。在一些開發環境中,使用少量事務類型和少量開發人員,在應用程序代碼中使用不太嚴格的隔離級別和明確管理競爭條件通常更具成本效益。一旦你有幾十個程序員對付有着數百個表和成千上萬個事務類型的模式,確定競爭條件存在的成本可能會在不太嚴格的隔離級別下變得不堪重負,並且使用可序列化的事務通常會變得更具成本效益。

當前,提供可序列化事務最常使用的方法是嚴格的兩階段鎖定(S2PL),它依賴於阻塞每個事務結束時保持的鎖,以及通過回退來終止死鎖的死鎖檢測。在寫入爭用很少的負載中,可以使用樂觀併發控制(OCC)。它在事務處理過程中跟蹤「讀取集」,並在任何其他事務修改讀取集時回滾。有些數據庫產品將快照隔離稱爲可串行化,但實際上並未提供SQL標準所要求的保證。 Serializable快照隔離(SerializableSSI或SSI)這一新技術首次在2008 ACM SIGMOD上發表的學術論文中得到了描述,並在PostgreSQL 9.1和更高版本中使用。它使用快照隔離和追蹤讀寫依賴關係模式來確定何時必須取消事務。還有其他一些在生產中看不到的技術。這些都有其自身的優點和缺點,爲這樣的問題提供了不同的盈虧平衡點。