MySQL_MVCC机制

本文详细解析了MySQL的多版本并发控制(MVCC)机制,包括undolog版本链如何跟踪事务历史,以及ReadView如何确保事务隔离。核心内容涉及事务ID、roll_pointer和读取视图的使用策略,帮助读者掌握并发环境下数据一致性维护的关键原理。
摘要由CSDN通过智能技术生成

MySQL MVCC机制

multi-version concurrent control,多版本并发控制,专门控制多个事务并发运行的时候,互相影响产生的问题

1.undo log版本链

undo log版本链

每条数据都有两个隐藏字段,一个是trx_id,一个是roll_pointer,trx_id就是最近一次更新这条数据的事务id,roll_pointer就是指向了更新这个事务之前生成的undo log

2.ReadView

ReadView

执行一个事务的时候,会生成一个ReadView,它里面有四个东西比较关键

  • m_ids:此时有哪些事务在MySQL里还没提交
  • min_trx_id:m_ids里最小的值
  • max_trx_id:MySQL下一个要生成的事务id
  • creator_trx_id:当前事务id

MySQL基于undo log版本链和ReadView机制来实现MVCC,简单来说就是只操作不大于当前事务id的数据,如果查到数据大于当前事务id,就通过undo log版本链找到小于或等于当前事务id的版本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQLMVCC(多版本并发控制)机制是保证数据一致性的重要手段。MVCC的核心思想是在数据库中保存多个版本的同一行数据,这些版本在不同的时间被不同的事务读取和修改。因此,每个事务看到的数据版本都是不同的,以此来提高并发性和隔离性。 在MySQL中实现MVCC需要以下两个机制: 1. 版本号:每个数据行都有一个版本号,用来标识该行的版本信息。版本号是一个递增的数字,每次更新数据时都会增加。 2. 快照读:在MVCC中,读取数据时不会对其进行加锁,而是通过快照读的方式来读取数据。快照读会读取最近的数据版本,如果该版本已经被其他事务修改,则会读取最近的未被修改的版本。 当一个事务读取数据时,MySQL会将当前事务的版本号和数据行的版本号进行比较,如果当前事务的版本号小于数据行的版本号,则说明当前事务读取的数据已经被其他事务修改了,此时MySQL会重新读取最新的数据版本。这样可以避免脏读和不可重复读等问题。 当一个事务更新数据时,MySQL会将数据行的版本号加1,并将新版本的数据插入到数据库中。同时,MySQL会将旧版本的数据标记为已经删除,但是并不会真正删除,这样可以保证其他事务仍然可以读取旧版本的数据。 总之,MVCC机制通过版本号和快照读的方式来保证事务的隔离性,避免了脏读、不可重复读和幻读等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值