MySQL-MVCC原理

MVCC是什么?

MVCC:Multiversion concurrency control(多版本并发控制)

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

Mysql中MVCC逻辑流程

插入

删除

修改

查询

案例分析

案例一(代码执行顺序:1,2,3,4,2)

案例二(代码执行顺序:3,4,1,2)

Undo Log

以撤销操作为目的,返回指定某个状态的操作,undo log指事务开始之前,在操作任何数据之前,实现将需要操作的数据备份到一个地方

UndoLog是为了实现事务的原子性而出现的产物:

  • 事务处理过程中如果出现了错误或者用户执行了rollback,mysql可以利用undoLog中的备份将数据恢复到事务开始之前的状态。

UndoLog在mysql的InnoDB存储引擎中用来实现多版本并发控制:

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

当前读、快照读

  • 快照读:sql读取的数据是快照版本,也就是历史版本,普通的select就是快照读,innodb快照读,数据的读取将由cache(原本数据)+undo(事务修改过的数据)两部分组成
  • 当前读:sql读取的数据是最新版本。通过锁机制来保证读取的数据无法通过其他事务进行修改;udpate、delete、insert、select......lock in share mode、select ...... for update都是当前读

Redo Log

以恢复操作为目的,重现操作;redolog指事务中操作的任何数据,将最新的数据备份到一个地方;

redolog的持久:不是随着事务的提交才写入的,而是在事务的执行过程中,便开始写入redo中

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

RedoLog补充知识

  • 指定redolog记录在{datadir}/ib_logfile1&ib_logfile2可通过innodb_log_group_home_dir配置指定目录存储
  • 一旦事务成功提交且数据持久化落盘之后,此时redo log 中的对应事务记录就会失去意义,所以redo log的写入时日志文件循环写入的
  • 指定redolog日志文件组中的数量innodb_log_files_in_group默认为2
  • 指定redolog每一个日志文件最大存储量innodb_log_buffer_size默认16M
  • redo buffer持久化redo log的策略,innodb_flush_log_at_trx_commit:
    • 0:每秒提交redo buffer --> redolog os cache --> flush cache to disk可能丢失一秒内的事务数据
    • 1:默认值,每次事务提交执行redo buffer --> redo log os cache --> flush cache to disk最安全,性能最差的方式
    • 2:每次事务提交执行redo buffer --> redo log os cache再每一秒执行 --> flush cache to disk操作

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值