繁体   English   中英

什么是多版本并发控制 (MVCC),谁支持它? [关闭]

[英]What is Multiversion Concurrency Control (MVCC) and who supports it? [closed]

最近,Jeff发布了关于他在与读取相关的数据库死锁方面遇到的麻烦。 多版本并发控制 (MVCC)声称可以解决这个问题。 它是什么,哪些数据库支持它?

更新:这些支持它(还有哪些?)

  • 甲骨文
  • PostgreSQL

很久以来(至少从 oracle 8.0 开始),Oracle 就拥有一个出色的多版本控制系统

以下应该有所帮助。

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

我试图用最简单的术语来解释……数据库中的多版本处理有很多。

PostgreSQL 的多版本并发控制

以及这篇文章,其中展示了在发出 INSERT、UPDATE 和 DELETE 语句时 MVCC 如何工作的图表。

以下是MVCC的实现:

SQL Server 2005(非默认, SET READ_COMMITTED_SNAPSHOT ON

Oracle(从版本 8 开始)

MySQL 5(仅适用于 InnoDB 表)

PostgreSQL

火鸟

Informix

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

Firebird 做到了,他们称之为 MGA(多代架构)。

他们保持原始版本不变,并添加一个只有使用它的会话才能看到的新版本,提交时禁用旧版本,为每个人启用新版本(文件堆积数据,需要定期清理) .

Oracle 覆盖数据本身,并为其他会话使用回滚段/撤消表空间并回滚。

XtremeData dbX 支持 MVCC。

此外,dbX 可以利用在 FPGA 硬件中实现的 SQL 原语。

SAP HANA 也使用 MVCC。 SAP HANA 是一个完整的内存计算系统,因此选择的 MVCC 成本非常低...... :)

如果您使用 InnoDB 表,MySQL 默认也使用 MVCC: http : //dev.mysql.com/doc/refman/5.0/en/innodb-multi-versioning.html

这是MVCC 上 PostgreSQL 文档页面链接 选择报价(强调我的):

使用并发控制而不是锁定的 MVCC 模型的主要优点是,在 MVCC 中,为查询(读取)数据而获取的锁与为写入数据而获取的锁不冲突,因此读取从不阻塞写入,写入从不阻塞读取

这就是杰夫对他的僵局如此困惑的原因。 阅读应该永远不会导致它们。

SQL Server 2005 及更高版本提供 MVCC 作为选项; 然而,它不是默认值。 如果有内存的话,MS 称之为快照隔离。

MVCC 也可以通过向表中添加版本号列并始终执行插入而不是更新来手动实现。

这样做的代价是一个更大的数据库,而且选择更慢,因为每个人都需要一个子查询来找到最新的记录。

对于需要对所有更改进行 100% 审核的系统,这是一个出色的解决方案。

McObject 在 11/09 宣布它已经在其 eXtremeDB 嵌入式数据库中添加了一个可选的 MVCC 事务管理器:

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

eXtremeDB 最初是作为内存数据库系统 (IMDS) 开发的,现在提供混合(内存/磁盘)存储、高可用性、64 位支持等版本。

在这篇由 McObject 的联合创始人兼 CEO 在 RTC 杂志上撰写的文章中,对 MVCC 有一个很好的解释——带有图表——以及 eXtremeDB 的一些性能数据:

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

显然,随着应用程序扩展到包括在多个 CPU 内核上执行的许多任务,MVCC 越来越有益。

DB2 9.7 版中有 postgress plus 的许可版本。 这意味着此功能(在正确的模式下)支持此功能。

Berkeley DB也支持 MVCC。

而在 MySQL 中使用BDB 存储引擎时,MySQL 也支持 MVCC。

Berkeley DB 是一个非常强大的、可定制的、完全符合 ACID 的 DBMS。 它支持多种不同的索引方法,主从复制,可以用作具有自己的动态 API 的纯键值存储,或者如果需要,可以使用 SQL 进行查询。 值得一看。

另一个包含 MVCC 的面向文档的 DBMS 是CouchDB 这里的 MVCC 也是内置对等复制的一大优势。

来自http://vschart.com/list/multiversion-concurrency-control/

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM