MVCC(多版本并发控制)

基本概念

MVCC是一种并发控制机制,用于多个并发事务同时读写数据库时保持数据的一致性和隔离性,MVCC 通过创建数据的多个版本和使用快照读取来实现并发控制(通过在每个数据行上维护多个版本的数据来实现的。当一个事务对数据库进行修改时会创建一个快照),读操作使用旧版本数据的快照,写操作创建新版本。

事务操作

当一个事务进行读操作时,它会使用快照读,写操作时,会生成一个新的数据脚本,并将修改后的数据写入数据库。事务提交时所做的修改将成为数据库的最新版本,对其他的事务可见。回滚时,所做的修改将被撤销,对其他事务不可见。为了防止数据库中的版本无限增长,MVCC 会定期进行版本的回收(删除不要的数据)。

InnoDB 对 MVCC 的实现

MVCC 的实现依赖于:隐藏字段、Read View、undo log,在内部实现中,InnoDB 通过数据行的 DB_TRX_IDRead View 来判断数据的可见性,如不可见,则通过数据行的 DB_ROLL_PTR 找到 undo log 中的历史版本。每个事务读到的数据版本可能是不一样的,在同一个事务中,用户只能看到该事务创建 Read View 之前已经提交的修改和该事务本身做的修改。

MVCC+Next-key-Lock 防止幻读

InnoDB存储引擎在 RR 级别下通过 MVCCNext-key Lock 来解决幻读问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值