47

最近、Jeff は、読み取りに関連するデータベースのデッドロックに関する彼の問題について 投稿しました。Multiversion Concurrency Control (MVCC)は、この問題を解決すると主張しています。それは何ですか、どのデータベースがそれをサポートしていますか?

更新:これらはそれをサポートしています(他にはどれですか?)

  • オラクル
  • postgresql
4

15 に答える 15

41

Oracle は非常に長い間 (少なくとも oracle 8.0 以降) 優れたマルチ バージョン管理システムを導入してきました。

以下が役立ちます。

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

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

于 2008-08-26T08:04:44.073 に答える
10

PostgreSQL のマルチバージョン同時実行制御

INSERT、UPDATE、および DELETE ステートメントを発行するときに MVCC がどのように機能するかを示すこの記事も同様です。

于 2008-08-26T07:15:58.493 に答える
9

以下はMVCCの実装を持っています:

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

Oracle (バージョン 8 以降)

MySQL 5 (InnoDB テーブルのみ)

PostgreSQL

火の鳥

Informix

Sybase と IBM DB2 メインフレーム/LUW には MVCC の実装がないことは確かです

于 2009-06-04T17:53:34.110 に答える
3

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

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

于 2010-11-15T17:49:31.693 に答える
3

Firebird はそれを行います。彼らはそれを MGA (Multi Generational Architecture) と呼んでいます。

元のバージョンをそのまま保持し、それを使用するセッションのみが表示できる新しいバージョンを追加します。コミットすると、古いバージョンが無効になり、新しいバージョンがすべてのユーザーに対して有効になります (ファイルはデータで山積みになり、定期的なクリーンアップが必要です)。 .

Oracle はデータ自体を上書きし、ロールバック セグメント/UNDO テーブルスペースを他のセッションとロールバックに使用します。

于 2008-10-29T06:12:52.723 に答える
2

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

于 2012-09-12T08:15:50.867 に答える
1

MVCC の PostgreSQL ドキュメント ページへのリンクを次に示します。選択の引用(私の強調):

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

これが、ジェフが行き詰まりに非常に困惑した理由です。読み取りによってそれらが発生することはありません。

于 2008-08-26T11:31:37.257 に答える
1

InnoDB テーブルを使用する場合、MySQL はデフォルトで MVCC も使用します: http://dev.mysql.com/doc/refman/5.0/en/innodb-multi-versioning.html

于 2008-10-29T03:52:10.980 に答える
1

SQL Server 2005 以降ではオプションとして MVCC が提供されます。ただし、これはデフォルトではありません。メモリが機能する場合、MS はこれをスナップショット分離と呼んでいます。

于 2008-08-26T21:56:36.367 に答える
1

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

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

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

于 2008-08-26T22:00:06.793 に答える
1

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

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

当初はインメモリ データベース システム (IMDS) として開発された eXtremeDB は、ハイブリッド (インメモリ/オンディスク) ストレージ、高可用性、64 ビット サポートなどを備えたエディションで利用できるようになりました。

于 2010-07-31T02:55:31.060 に答える
1

McObject の共同創設者兼 CEO が RTC Magazine に書いたこの記事には、MVCC の図を使用した適切な説明と、eXtremeDB のいくつかのパフォーマンス数値があります。

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

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

于 2010-07-31T03:01:04.640 に答える
0

DB2 バージョン 9.7 には、ライセンス版の postgress plus が含まれています。これは、この機能が (適切なモードで) この機能をサポートしていることを意味します。

于 2010-05-20T11:40:18.627 に答える
0

Berkeley DBは MVCC もサポートしています。

また、MySQL でBDB ストレージ エンジンを使用すると、MySQL も MVCC をサポートします。

Berkeley DB は、非常に強力でカスタマイズ可能な、完全に ACID 準拠の DBMS です。インデックス作成、マスター/スレーブ レプリケーションのためのいくつかの異なる方法をサポートし、独自の動的 API を使用して純粋なキー値ストアとして使用したり、必要に応じて SQL でクエリを実行したりできます。一見の価値があります。

MVCC を採用した別のドキュメント指向の DBMS はCouchDBです。ここでの MVCC は、組み込みのピアツーピア レプリケーションにとっても大きな利点です。

于 2011-04-25T12:35:12.763 に答える
0

http://vschart.com/list/multiversion-concurrency-control/から

Couchbase、OrientDB、CouchDB、PostgreSQL、Project Voldemort、BigTable、Percona Server、HyperGraphDB、Drizzle、Cloudant、IBM DB2、InterSystems Caché、InterBase

于 2012-02-23T21:03:56.337 に答える