mysql undo_mysql undo原理

一.undo存储管理

1.innodb存储引擎对undo的管理同样采用段的方式。

每个rollback segment 包含1024个undo log segment,事务再每个undo log segment中进行undo页的申请。

2.innodb1.2开始,可以通过下面参数对rollback segment做进一步的设置:

innodb_undo_directory    #undo表空间存放目录

innodb_undo_logs         #设置rollback segment的个数

innodb_undo_tablespaces  #设置构成rollback segment文件的数量,这样可以较为平均的分布在多个文件中

innodb_undo_log_truncate #参数设置为1,即开启在线回收(收缩)undo log日志文件,支持动态设置

innodb_max_undo_log_size    #当undo表空间超过该参数设定时,会标记为truncation,选择一个undo表空间进行截断

innodb_purge_rseg_truncate_frequency     #undo 表空间一般不能直接truncate,需要在所有回滚段释放完后,才能truncate, purge system每128次释放一次回滚段,可以通过参数

3.事务在undo log segment分配页写入undo log的过程同样需要写入重做日志,当事务提交时,innodb会做以下两件事:

-将undo log放入列表,以供以后的purge操作

-判断undo log 所在页是否可以重用,若可以则分配给下个事务使用

4.

undo独立表空间被分位3个部分:

rseg0 --永久固定在ibdata中

rseg1-32 --用于临时表回滚段,存放在ibtmp1中

rseg33-128 --用于undo普通事务,存放在undo文件中

事务默认以只读事务开启,使用1-32rseg,当随后判定为读写事务时,转换成读写模式,使用33-128rseg,并为其分配事务ID和回滚段

二.undo log格式

1.insert undo log

指在insert操作中产生的undo log,因为insert操作的记录只对事务本身可见。因此该undo log在事务提交后直接删除,不需要进行purge操作。

2.update undo log

记录的是对delete和update操作产生的undo log,该log需要提供mvcc机制,因此不能在事务提交时就进行删除。提交时放入undo log链表,等待purge线程进行清除。

三.查看undo信息

1.查看rollback segment所在页

select segment_id,space,page_no from information_schema.innodb_trx_rollback_segment;

2.记录事务对应的undo log信息

select * from information_schema.INNODB_TRX_UNDO\G;

四.purge 机制

purge用来最终完成delete和update操作。

全局动态参数innodb_purge_batch_size用来设置每次purge操作需要清理的undo page数量。默认值为300

全局动态参数innodb_max_purge_lag用来控制history list的长度,若大于该参数时,其会延缓DML的操作

全局动态参数innodb_max_purge_lag_delay,用来控制DML操作每行数据的最大延缓时间,单位为毫秒。

ef36a68b1aba11ffef7da696cd05c0c8.png

五.mysql8.0 undo的改变

(1).innodb_undo_logs被废除,改为innodb_rollback_segments=1~128,可以在线修改

(2).innodb_undo_tablespaces参数默认是2,最大127。可以随意在线增加或减少。

(3).undo表空间的名字由undo001 ,变为undo_001

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值