MySQL夯实之路-MVCC机制深入浅出

发布时间:2024年01月13日

多版本并发控制(MVCC,multiversion concurrency control)

MVCC用更加灵活的方式处理并发,实现了读不加锁,读写不冲突。保证了事务的隔离性(可重复读),避免了不可重复读问题。

数据库实现MVCC的方式不尽相同,典型的有乐观并发控制,悲观并发控制

Mvcc类似行级锁,大都实现了非阻塞的读操作,写操作只锁定必要的行。

Mvcc通过保存数据在某个时间点的快照来实现。即不管需要执行多长时间,每个事务看到的数据是一致的

innoDB的mvcc实现过程

innnoDB需要维护mvcc,会损耗性能,这也是innoBD比Myisam查询慢的原因之一。

每行记录保存两个隐藏的列,分别为创建时间和过期时间(或删除时间)的版本号。开始版本号作为事务版本号,每开始一个新的事务,版本号会自增

innoDB可重复读隔离级别下的具体操作

Select

查询需要满足以下条件:

  1. 版本早于(系统版本号小于等于)当前事务版本的数据行
  2. 行的删除版本未定义或大于当前事务版本

Insert

插入的行的行版本号为当前系统版本号

Delete

删除的行的删除版本号为当前系统版本号

Update

转换成insert + delete:插入一条数据,行版本号设为当前系统版本号;原来行的删除版本号为当前系统版本号

Mvcc只在可重复读和提交读的隔离级别下生效,因为为提交读总是读取最新数据行,可串行化对所有读取的行加锁。

文章来源:https://blog.csdn.net/qq_61282807/article/details/135465095
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。