mysql+清理undo_undo清理 &redo 持久化

为了进行mvcc(多版本并发控制)与回滚,innodb单独管理着undo空间(undo space、rollback segment)。

1)当执行update语句后,即使不执行commit,数据列也会在innodb缓冲池修改。但是innodb存储引擎无法确定用户执行update语句后,执行rollback操作还是commit操作。

因此为了应对用户可能rollback操作的情形,先要将修改之前的数据保存到undo日志。

2)当用户进行commit,缓冲池中变更的内容就会持久化。

3)当用户进行rollback,就会将保存在undo日志的旧数据还原。

innodb不会将缓冲池中的内容立即刷到数据文件,而是按照一定周期写入。所以,执行完(1)时,数据文件列值可能为新值,也可能为旧值。(若innodb的后台线程已经将记录写入数据文件,那么原值就会被更新为新值)

大量客户连接中的数据发生变化时,undo日志会积累许多变更前的信息,这些积累的信息必须在某时刻进行删除,留出足够空间来保存以后的变更内容,这个动作就是undo清理(undo purge)。mysql5.7的innodb,允许用户将innodb_purge_threads系统变量设置为大于1的值,这样就可以多个undo清理线程做清理工作。

redo持久化:

当执行DML语句时,变更的数据会先记录到重做(redo)日志,同时持久化到磁盘。

innodb存储引擎只在内存(innodb缓冲池)中更改实际数据表的数据,innodb会在某个时刻将仅在内存(innodb缓冲池)中更改的数据持久化到磁盘。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值