Mysql性能优化 - MVCC
Mysql性能优化 - MVCC
什么是mvcc
多版本并发控制
并发访问数据库时,对正在事务内处理的数据做多版本的管理,以达到避免写操作的阻塞,从而引发读操作的并发问题
mvcc插入流程
mvcc删除流程
mvcc修改流程
mvcc查询流程
Undo Log
undo意为取消,以撤销操作为目的,返回指定某个状态的操作
undo log指事务开始之前,在操作任何数据之前,首先把要操作的数据备份到一个地方(Undo Log)
Undo log是为了实现事务的原子性而存在的:
事务处理过程中如果出现了错误或者用户执行了ROLLBACK语句,mysql就可以利用Undo Log中的备份将数据恢复到事务开始之前的状态
Undo log在Mysql innodb存储引擎中用来实现多版本并发控制:
事务未提交之前,Undo保存了未提交之前的版本数据,Undo中的数据可以作为旧版本的快照提供其他并发事务快照读。
当前读,快照读
快照读:
sql读取的数据时快照版本,也就是历史版本,普通的select就是快照读
innodb快照读,读数据将时由cache(原本数据)+undo(事务修改过的数据)两部分组成
当前读:
sql读取的数据时最新版本。通过锁机制来保证读取的数据无法通过其他事务进行修改,update,delete,insert 包括select加锁的查询都是当前读
Redo Log
redo 重做,以恢复操作为目的,重新操作
redo log指事务操作中的任何数据,将最小的数据备份到一个地方(Redo Log)
redo log 不是随着事务的提交才写入的,而是在事务执行的过程中,便开始写入redo中。具体落盘策略可配。
Redolog 是为了实现事务的持久化产生的:
防止在发生故障的时间点,尚有脏页为写入到磁盘,在重启mysql服务的时候,根据redolog 进行重做,从而达到事务未入磁盘数据进行持久化这一特征