2008-08-26 52 views
38

最近傑夫有posted關於他與閱讀有關的數據庫死鎖的麻煩。 Multiversion Concurrency Control (MVCC)聲稱解決這個問題。它是什麼,什麼數據庫支持它?數據庫:什麼是Multiversion併發控制(MVCC)和誰支持它?

更新:這些支持它(這人?)

  • 甲骨文
  • PostgreSQL的
+1

無法獲得Jim Starkey的原創白皮書,但後面還有一些內容:http:// web。 firebirdsql.org/doc/whitepapers/fb_vs_ibm_vs_oracle.htm http://mike.kruckenberg.com/archives/2006/04/jim_starkey_int.html – 2013-04-24 15:33:20

+0

[H2數據庫引擎](http://www.h2database.com/)也[默認支持MVCC](http://h2database.com/html/advanced.html#mvcc)。 – 2016-08-13 17:52:29

回答

32

甲骨文已到位的優秀的多版本控制系統,因爲很長(由於Oracle 8.0至少)

以下應該有所幫助。

  1. 用戶A啓動一個事務和正在更新1000行與一些值在時刻t1
  2. 用戶B在時間T2讀取相同的1000行。
  3. 用戶A更新具有值Y(原始值X)的行543
  4. 用戶B到達行543並且發現自從時間T1以來事務處於操作中。
  5. 數據庫從日誌中返回未修改的記錄。返回的值是在小於或等於T2時提交的值。
  6. 如果無法從重做日誌中檢索記錄,則意味着數據庫沒有正確設置。需要爲日誌分配更多的空間。
  7. 這樣就可以實現閱讀整合。返回的結果始終與交易的開始時間相同。所以在一個事務中讀取一致性是可以實現的。

我試圖用最簡單的術語來解釋......有很多數據庫中的多版本控制。

+0

+1自Oracle 8.0之前的方式 - 因爲我相信Oracle 4.0。 – 2010-11-26 09:59:26

+0

讀取一致性和重複讀取是否一樣? – Chao 2015-02-12 06:41:44

1

這裏是link to the PostgreSQL doc page on MVCC。選擇報價(重點礦山):

主要優勢,使用併發控制MVCC模型,而不是鎖定的是,在查詢獲得的MVCC鎖(讀)數據不寫入數據獲取的鎖衝突,等閱讀從不阻止寫作和寫作永不阻止閱讀

這就是爲什麼傑夫被他的僵局困擾的原因。閱讀不應該導致它們。

1

SQL Server 2005及更高版本提供MVCC作爲選項;但它不是默認值。如果內存服務,MS稱它爲快照隔離。

1

MVCC也可以手動實現,方法是向表中添加版本號列,並始終執行插入而不是更新。

這是一個更大的數據庫,並且選擇較慢,因爲每一個都需要一個子查詢來查找最新記錄。

對於需要對所有更改進行100%審覈的系統,這是一個出色的解決方案。

2

火鳥這樣做,他們稱之爲MGA(多代架構)。

它們保持原始版本不變,並添加一個新版本,只有使用它的會話才能看到,當提交舊版本時禁用,併爲每個人啓用較新的版本(該文件與數據堆疊起來需要定期清理)。

Oracle覆蓋數據本身,併爲其他會話使用回滾段/撤消表空間並回滾。

8

下面有MVCC的實現:

SQL Server 2005的(非默認,SET READ_COMMITTED_SNAPSHOT ON

甲骨文(自第8版)

的MySQL 5(僅適用於InnoDB表)

PostgreSQL的

火鳥

的Informix

我敢肯定Sybase和IBM DB2主機/ LUW沒有MVCC的實現

0

DB2版本9.7具有postgress行貨版本加在裏面。這意味着此功能(在正確模式下)支持此功能。

1

McObject公司在09年11月宣佈,它已經增加了一個可選的MVCC事務管理它的eXtremeDB嵌入式數據庫:

http://www.mcobject.com/november9/2009

eXtremeDB的,最初是作爲一個內存數據庫系統(IMDS),是現在有混合(內存/磁盤)存儲,高可用性,64位支持等版本。

1

有MVCC的一個很好的解釋 - 有圖 - 在這篇文章中對eXtremeDB的一些性能數字,由McObject公司的聯合創始人兼CEO寫的,在RTC雜誌:

http://www.rtcmagazine.com/articles/view/101612

顯然MVCC隨着應用程序擴展以包含在多個CPU內核上執行的許多任務,這一點越來越有益。

2

XtremeData dbX支持MVCC。

另外,dbX可以使用在FPGA硬件中實現的SQL原語。

0

Berkeley DB也支持MVCC。

而當在MySQL中使用BDB storage engine時,MySQL也支持MVCC。

伯克利DB是一個非常強大的,可定製的完全符合ACID的DBMS。它支持幾種不同的索引方法,主從複製,可以用它自己的動態API作爲純鍵值存儲,或者如果需要的話可以用SQL查詢。值得一看。

另一個面向文檔的DBMS擁抱MVCC將是CouchDB。這裏的MVCC對於內置的對等複製也是一大優勢。

2

SAP HANA也使用MVCC。 SAP HANA是一個完整的內存計算系統,所以選擇的MVCC成本非常低... :)