Mysql性能优化 - MVCC

Mysql性能优化 - MVCC

什么是mvcc

多版本并发控制

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

mvcc插入流程

Mysql性能优化 - MVCC

mvcc删除流程

Mysql性能优化 - MVCC

mvcc修改流程

Mysql性能优化 - MVCC

mvcc查询流程

Mysql性能优化 - MVCC

Undo Log

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

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

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

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

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

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

Mysql性能优化 - MVCC

当前读,快照读

快照读:

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

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

当前读:

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

Redo Log

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

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

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

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

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

Mysql性能优化 - MVCC