2008-08-26 25 views
38

最近、Jeffさんは読書に関連したデータベースのデッドロックについての彼のトラブルに関してpostedを持っています。 Multiversion Concurrency Control (MVCC)はこの問題を解決すると主張しています。それは何ですか、そしてそれをサポートするデータベースは何ですか?データベース:MVCC(Multiversion Concurrency Control)とは何ですか?MVCCは誰をサポートしていますか?

は更新:これらのサポートも(他の人?)

  • オラクル
  • のpostgresql
+1

オリジナルのジム・スターキーの白書は入手できませんが、http://web。 firebirdsql.org/doc/whitepapers/fb_vs_ibm_vs_oracle.htm http://mike.kruckenberg.com/archives/2006/04/jim_starkey_int.html –

+0

[H2データベースエンジン](http://www.h2database.com/)も[デフォルトでMVCCをサポート](http://h2database.com/html/advanced.html#mvcc)。 –

答えて

32

Oracleは役立つはず後

(少なくともオラクル8.0以降)非常に長いので、代わりに優れたマルチバージョン管理システムを持っています。

  1. ユーザAは、トランザクションを開始し、時刻T1
  2. ユーザBには、いくつかの値を持つ1000行を更新して、時刻T2で、同じ1000行を読み取ります。
  3. ユーザーAは、値Y(元の値X)の行543を更新します。
  4. ユーザーBは行543に到達し、時刻T1以降のトランザクションが実行中であることを検出します。
  5. データベースは、変更されていないレコードをログから返します。返される値は、T2以下の時間にコミットされた値です。
  6. レコードをREDOログから取得できなかった場合、データベースが適切に設定されていないことを意味します。ログには、より多くのスペースが割り当てられている必要があります。
  7. このようにして、読み取りコンシステンシが達成されます。返される結果は、トランザクションの開始時刻に関して常に同じです。したがって、トランザクション内ではリード一貫性が達成されます。

私は可能な限り簡単に説明しようとしています...データベースのマルチバージョン化には多くのことがあります。

+0

+1オラクル8.0より前の道 - オラクル4.0以来、私は信じています。 –

+0

また、読み取りの一貫性と繰り返し読み取りの間で同じですか? – Chao

1

ここにはlink to the PostgreSQL doc page on MVCCがあります。選択肢の引用(強調鉱山):

同時実行制御のMVCCモデルを使用してではなく、ロックへの主な利点は、(読み取り)データを照会するために取得MVCCロックにデータを書き込むため取得したロックと競合しないということです、したがって、の読み取りと書き込みはブロックしません。ブロックの読み取りはブロックをブロックしません。

これは、Jeffがデッドロックによって非常に混乱した理由です。読書は決してそれらを引き起こすべきではありません。

1

SQL Server 2005以降では、オプションとしてMVCCを提供しています。しかし、デフォルトではありません。メモリが機能する場合、MSはスナップショットアイソレーションと呼びます。

1

MVCCは手動で実装することもできます。バージョン番号の列をテーブルに追加し、常に更新の代わりに挿入を行います。

このコストは、はるかに大きなデータベースであり、最新のレコードを見つけるためにサブクエリが必要なため、選択が遅くなります。

これは、すべての変更に対して100%の監査を必要とするシステムにとって優れたソリューションです。

2

Firebirdのは、それをしない、彼らは(マルチ世代アーキテクチャ)MGAそれを呼び出します。

元のバージョンをそのまま維持し、それを使用しているセッションだけが見ることができます。コミットすると古いバージョンが無効になり、新しいバージョンがすべてのユーザーに対して有効になります。定期的なクリーンアップが必要)。

Oracleはデータ自体を上書きし、他のセッションおよびロールバックにはロールバック・セグメント/ UNDO表領域を使用します。

+0

Interbaseと同じですが、Firebirdがあるときに使用するのは意味がないと思います。 http://ibexpert.net/ibe/index.php?n=Doc.MultiGenerationalArchitectureMGAAndRecordVersioning –

+1

FirebirdはInterbaseです。:) –

+0

Firebird WAS Interbase、それらは分岐しています –

8

次はMVCCの実装があります

SQL Server 2005の(デフォルト以外の、SET READ_COMMITTED_SNAPSHOT ON)を

のOracle(バージョン8以降)

のMySQL 5(InnoDBテーブルのみ)

PostgreSQLの

Firebirdの

Informixの

私は、SybaseおよびIBM DB2メインフレーム/ LUWがMVCC

0

の実装を持たないDB2バージョン9.7のはpostgressのライセンス版を持っているかなり確信しているプラ​​スその中に。これは、この機能が(正しいモードで)この機能をサポートしていることを意味します。

1

McObject社は、そのeXtremeDBの組み込みデータベースに任意MVCCトランザクションマネージャを追加したことを11/09に発表:

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

eXtremeDBの、本来インメモリデータベースシステム(IMDS)として開発されていますハイブリッド(インメモリ/オンディスク)ストレージ、ハイアベイラビリティ、64ビットサポートなどのエディションでご利用いただけます。

1

MVCCの良い説明があります - 図表で - RTCマガジンのMcObject社の共同創設者兼最高経営責任者(CEO)によって書かれ、この記事ではeXtremeDBのためのいくつかのパフォーマンスの数値は、:

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

明らかにMVCCアプリケーションが複数のCPUコアで実行される多くのタスクを含むように拡張するにつれ、ますます有益です。

2

XtremeData dbXはMVCCをサポートしています。

さらに、dbXはFPGAハードウェアで実装されたSQLプリミティブを使用できます。

0

Berkeley DBもMVCCをサポートします。

そして、BDB storage engineがMySQLで使用されるとき、MySQLはMVCCもサポートします。

バークレーDBは、非常に強力でカスタマイズ可能な完全ACID準拠のDBMSです。これは、独自の動的APIを使用して純粋なキー値ストアとして使用することも、必要に応じてSQLを照会することもできます。見てみる価値がある。

MVCCを含むもう1つのドキュメント指向DBMSはCouchDBです。 MVCCは、組み込みのピアツーピアレプリケーションにも大きなプラスです。 http://vschart.com/list/multiversion-concurrency-control/

のCouchbase、 OrientDB、 CouchDBは、 のPostgreSQL、 プロジェクトヴォルデモート、 BigTableの、 Perconaサーバー、 HyperGraphDB、 霧雨、 Cloudant、 IBM DB2、 インターシステムズのCaché、 から

0

InterBase

2

SAP HANAもMVCCを使用します。 SAP HANAは完全なインメモリ・コンピューティング・システムなので、MVCCの選択コストは非常に低くなります。:)

+1

あなたはそのステートメントへのリンクを追加できます。 –

関連する問題