データベース:マルチバージョン同時実行制御 (MVCC) とは何ですか? 誰がそれをサポートしていますか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/27499

  •  09-06-2019
  •  | 
  •  

質問

最近ジェフは 投稿されました 読み取りに関するデータベースのデッドロックの問題について。 マルチバージョン同時実行制御 (MVCC) この問題を解決すると主張しています。それは何ですか?また、それをサポートしているデータベースは何ですか?

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

  • オラクル
  • ポストグレSQL
役に立ちましたか?

解決

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

以下が役立つはずです。

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

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

他のヒント

以下には MVCC が実装されています。

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

Oracle (バージョン 8 以降)

MySQL 5 (InnoDB テーブルのみ)

PostgreSQL

火の鳥

インフォミックス

Sybase と IBM DB2 Mainframe/LUW には MVCC が実装されていないと確信しています。

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

同様に この記事 これには、INSERT、UPDATE、および DELETE ステートメントを発行するときに MVCC がどのように動作するかを示す図が含まれています。

エクストリームデータ dbX は MVCC をサポートします。

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

Firebird はこれを MGA (Multi Generational Architecture) と呼んでいます。

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

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

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

がここにあります MVCC の PostgreSQL ドキュメント ページへのリンク. 。選択の引用 (私のものを強調):

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

これが、ジェフが行き詰まりに非常に困惑した理由です。読み取りによってそれらが引き起こされることは決してあってはならない。

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

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

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

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

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

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

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

eXtremeDB は、もともとインメモリ データベース システム (IMDS) として開発されましたが、現在はハイブリッド (メモリ内/ディスク上) ストレージ、高可用性、64 ビット サポートなどを備えたエディションで利用可能です。

McObject の共同創設者兼 CEO が RTC Magazine に執筆したこの記事には、MVCC についての図付きのわかりやすい説明と eXtremeDB のパフォーマンス数値が記載されています。

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

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

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

バークレーDB MVCCもサポートします。

そしていつ BDBストレージエンジン は MySQL で使用されており、MySQL も MVCC をサポートしています。

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

MVCC を採用する別のドキュメント指向 DBMS は次のとおりです。 カウチDB. 。ここでの MVCC は、組み込みのピアツーピア レプリケーションにとっても大きな利点です。

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

CouchBase、OrientDB、CouchDB、PostgreSQL、Project VoldeMort、BigTable、Percona Server、HyperGraphdB、Drizzle、Cloudant、IBM DB2、IntersystesCaché、Interbase

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top