数据库:什么是多版本并发控制(MVCC)以及谁支持它?

Mar*_*son 45 database glossary deadlock

最近杰夫发布了关于他阅读相关数据库死锁的问题. 多版本并发控制(MVCC)声称可以解决这个问题.它是什么,以及哪些数据库支持它?

更新:这些支持它(其他人?)

  • 神谕
  • PostgreSQL的

Kra*_*ntz 36

Oracle已经有很好的多版本控制系统,因为很长时间(至少从oracle 8.0开始)

以下应该有所帮助

  1. 用户A启动一个事务,并在时间T1更新1000行,并带有一些值
  2. 用户B在时间T2读取相同的1000行.
  3. 用户A更新行543,其值为Y(原始值X)
  4. 用户B到达行543并且发现自时间T1以来事务处于操作中.
  5. 数据库从日志中返回未修改的记录.返回值是在小于或等于T2时提交的值.
  6. 如果无法从重做日志中检索记录,则表示数据库未正确设置.需要为日志分配更多空间.
  7. 这样就实现了阅读的一致性.返回的结果总是与事务的开始时间相同.因此,在事务中,实现了读取一致性.

我试图用最简单的术语来解释......在数据库中有很多多版本.


the*_*sdj 9

PostgreSQL的多版本并发控制

除了本文为特色的MVCC发出INSERT,UPDATE时,和DELETE语句的工作原理图.


小智 9

以下是MVCC的实现:

SQL Server 2005(非默认值SET READ_COMMITTED_SNAPSHOT ON)

Oracle(自版本8以来)

MySQL 5(仅限InnoDB表)

PostgreSQL的

火鸟

Informix的

我很确定Sybase和IBM DB2 Mainframe/LUW没有MVCC的实现