mysql undo001_MySQL之UNDO及MVCC、崩溃恢复

UNDO特性:避免脏读、事务回滚、非阻塞读、MVCC、崩溃恢复

崩溃恢复:redo前滚、undo回滚

长事务、大事务:危害、判断、处理

UNDO优化:实现undo分离、收缩undo表空间

0、undo物理存储研究

1>ibdata第五个数据块(系统事务表)中存储着128个undo段的段头块的地址

2>每一个undo段头块有1024行,两行记录一个事务,一共可以记录512个事务

3>一个数据行中存放XID、rollpointr

4>一个数据行被修改

1.新的事务ID

2.新的rollpointr

3.修改后数据

上面三部分数据都会进入到回滚块中。详细见:事务工作流程……

3aefe613706ed5058c5ccd7532e279e2.png

一、UNDO特性

1、避免脏读

1>在操作任何数据之前,首先将数据备份到undo页中,然后再进行数据的修改;

2>不能看到其他会话未提交的数据;

3>当要读取被修改数据页数据行时,会指向备份在undo页中的数据,而避免脏读。

2、事务的回滚

undo最基本的作用是rollback,旧数据先放到undo里面存放,等rollback时候再将undo里面的数据回滚回来。

3、DML不阻塞读

提高并发,如果别的用户正在修改某数据页,事务没有提交,现需要读该数据页,发现事务没有提交,就根据数据行上的rollpointer找到原来的数据(在undo页上),结合该数据页将数据返给用户。

4、MVCC(一致性读)

多版本控制Multiversion Concurrency Control

5、崩溃恢复(回滚)

自动回滚未提交事务;

redo前滚,undo回滚,未提交事务主动回滚,未提交事务信息在事务槽里写着。数据库在运行期间,突然崩了,数据库启动之后,需要redo前滚,就会有很多未提交的事务(事务的会话断了,不可能继续完成了,就需要对未提交事务回滚了 )也滚回来了:读取未提交事务事务槽信息,把未提交事务回滚。

二、事务工作流程:存储结构

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值