最近傑夫有posted關於他與閱讀有關的數據庫死鎖的麻煩。 Multiversion Concurrency Control (MVCC)聲稱解決這個問題。它是什麼,什麼數據庫支持它?數據庫:什麼是Multiversion併發控制(MVCC)和誰支持它?
更新:這些支持它(這人?)
- 甲骨文
- PostgreSQL的
最近傑夫有posted關於他與閱讀有關的數據庫死鎖的麻煩。 Multiversion Concurrency Control (MVCC)聲稱解決這個問題。它是什麼,什麼數據庫支持它?數據庫:什麼是Multiversion併發控制(MVCC)和誰支持它?
更新:這些支持它(這人?)
甲骨文已到位的優秀的多版本控制系統,因爲很長(由於Oracle 8.0至少)
以下應該有所幫助。
我試圖用最簡單的術語來解釋......有很多數據庫中的多版本控制。
+1自Oracle 8.0之前的方式 - 因爲我相信Oracle 4.0。 – 2010-11-26 09:59:26
讀取一致性和重複讀取是否一樣? – Chao 2015-02-12 06:41:44
PostgreSQL's Multi-Version Concurrency Control
除了this article其特點是MVCC發出INSERT時如何工作圖,UPDATE和DELETE語句。
這裏是link to the PostgreSQL doc page on MVCC。選擇報價(重點礦山):
主要優勢,使用併發控制MVCC模型,而不是鎖定的是,在查詢獲得的MVCC鎖(讀)數據不寫入數據獲取的鎖衝突,等閱讀從不阻止寫作和寫作永不阻止閱讀。
這就是爲什麼傑夫被他的僵局困擾的原因。閱讀不應該導致它們。
SQL Server 2005及更高版本提供MVCC作爲選項;但它不是默認值。如果內存服務,MS稱它爲快照隔離。
MVCC也可以手動實現,方法是向表中添加版本號列,並始終執行插入而不是更新。
這是一個更大的數據庫,並且選擇較慢,因爲每一個都需要一個子查詢來查找最新記錄。
對於需要對所有更改進行100%審覈的系統,這是一個出色的解決方案。
MySQL也使用MVCC在默認情況下,如果你使用InnoDB表: http://dev.mysql.com/doc/refman/5.0/en/innodb-multi-versioning.html
火鳥這樣做,他們稱之爲MGA(多代架構)。
它們保持原始版本不變,並添加一個新版本,只有使用它的會話才能看到,當提交舊版本時禁用,併爲每個人啓用較新的版本(該文件與數據堆疊起來需要定期清理)。
Oracle覆蓋數據本身,併爲其他會話使用回滾段/撤消表空間並回滾。
下面有MVCC的實現:
SQL Server 2005的(非默認,SET READ_COMMITTED_SNAPSHOT ON
)
甲骨文(自第8版)
的MySQL 5(僅適用於InnoDB表)
PostgreSQL的
火鳥
的Informix
我敢肯定Sybase和IBM DB2主機/ LUW沒有MVCC的實現
DB2版本9.7具有postgress行貨版本加在裏面。這意味着此功能(在正確模式下)支持此功能。
McObject公司在09年11月宣佈,它已經增加了一個可選的MVCC事務管理它的eXtremeDB嵌入式數據庫:
http://www.mcobject.com/november9/2009
eXtremeDB的,最初是作爲一個內存數據庫系統(IMDS),是現在有混合(內存/磁盤)存儲,高可用性,64位支持等版本。
有MVCC的一個很好的解釋 - 有圖 - 在這篇文章中對eXtremeDB的一些性能數字,由McObject公司的聯合創始人兼CEO寫的,在RTC雜誌:
http://www.rtcmagazine.com/articles/view/101612
顯然MVCC隨着應用程序擴展以包含在多個CPU內核上執行的許多任務,這一點越來越有益。
XtremeData dbX支持MVCC。
另外,dbX可以使用在FPGA硬件中實現的SQL原語。
Berkeley DB也支持MVCC。
而當在MySQL中使用BDB storage engine時,MySQL也支持MVCC。
伯克利DB是一個非常強大的,可定製的完全符合ACID的DBMS。它支持幾種不同的索引方法,主從複製,可以用它自己的動態API作爲純鍵值存儲,或者如果需要的話可以用SQL查詢。值得一看。
另一個面向文檔的DBMS擁抱MVCC將是CouchDB。這裏的MVCC對於內置的對等複製也是一大優勢。
從http://vschart.com/list/multiversion-concurrency-control/
Couchbase, OrientDB, CouchDB的, PostgreSQL的, 項目伏地魔, 的BigTable, 的Percona Server中, HyperGraphDB, 細雨, Cloudant, IBM DB2, InterSystems的緩存, InterBase
SAP HANA也使用MVCC。 SAP HANA是一個完整的內存計算系統,所以選擇的MVCC成本非常低... :)
無法獲得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
[H2數據庫引擎](http://www.h2database.com/)也[默認支持MVCC](http://h2database.com/html/advanced.html#mvcc)。 – 2016-08-13 17:52:29