Mysql性能优化 - MVCC

Mysql性能优化 - MVCC

什么是mvcc

多版本并发控制

并发访问数据库时,对正在事务内处理的数据做多版本的管理,以达到避免写操作的阻塞,从而引发读操作的并发问题

mvcc插入流程

image-20200814112620967

mvcc删除流程

image-20200814113700043

mvcc修改流程

image-20200814113732012

mvcc查询流程

image-20200814113846596

Undo Log

undo意为取消,以撤销操作为目的,返回指定某个状态的操作

undo log指事务开始之前,在操作任何数据之前,首先把要操作的数据备份到一个地方(Undo Log)

Undo log是为了实现事务的原子性而存在的:

​ 事务处理过程中如果出现了错误或者用户执行了ROLLBACK语句,mysql就可以利用Undo Log中的备份将数据恢复到事务开始之前的状态

Undo log在Mysql innodb存储引擎中用来实现多版本并发控制:

事务未提交之前,Undo保存了未提交之前的版本数据,Undo中的数据可以作为旧版本的快照提供其他并发事务快照读。

image-20200814114548068

当前读,快照读

快照读:

sql读取的数据时快照版本,也就是历史版本,普通的select就是快照读

innodb快照读,读数据将时由cache(原本数据)+undo(事务修改过的数据)两部分组成

当前读:

sql读取的数据时最新版本。通过锁机制来保证读取的数据无法通过其他事务进行修改,update,delete,insert 包括select加锁的查询都是当前读

Redo Log

redo 重做,以恢复操作为目的,重新操作

redo log指事务操作中的任何数据,将最小的数据备份到一个地方(Redo Log)

redo log 不是随着事务的提交才写入的,而是在事务执行的过程中,便开始写入redo中。具体落盘策略可配。

Redolog 是为了实现事务的持久化产生的:

防止在发生故障的时间点,尚有脏页为写入到磁盘,在重启mysql服务的时候,根据redolog 进行重做,从而达到事务未入磁盘数据进行持久化这一特征

image-20200814115256825

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值