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

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

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

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

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

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

innoDB的mvcc实现过程

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

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

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

Select

查询需要满足以下条件:

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

Insert

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

Delete

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

Update

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

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

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值