MySQL事务简述(三)

本文详细介绍了InnoDB存储引擎中的Undo日志及其在事务回滚和MVCC(多版本并发控制)中的作用。Undo日志保存在数据库内部的特殊段中,用于逻辑地撤销事务修改,支持非锁定读取。事务提交后,Undo日志会被放入链表等待Purge线程删除。InnoDB通过管理rollbacksegments和undo页重用来优化空间使用。此外,还讨论了如何配置和管理undo日志。
摘要由CSDN通过智能技术生成

InnoDB存储引擎中,另一个日志是undo日志。

它用来帮助事务回滚以及MVCC的功能。

用户通过一条roolback语句请求回滚,这是就可以利用undo信息将数据回滚到修改之前的样子。

与redo不同,undo存放在数据库内部的一个特殊段(segment)中,称为undo(segment)。undo段位于共享表空间内。

undo是逻辑日志。回滚之后,所有修改都被逻辑地取消了,但是数据结构和页本身在回滚之后可能不相同。

当InnoDB存储引擎回滚时,它实际做的事与先前相反的工作。对于Insert,InnoDB存储引擎会完成一个delete;对于delete,InnoDB会完成一个Insert;对于update,InnoDB存储引擎会执行一个相反的update。

MVCC的实现,是通过undo来完成。当读取一行记录时,已经被其他事务占用,当前事务可以通过undo读取之前的行版本信息,实现非锁定读取。

注意undo log会产生redo log,因为undo log也需要持久性的保护。

对于undo的管理,InnoDB存储引擎同样采用段的管理方式。Innodb存储引擎有rollback segment,每个回滚段记录1024个undo log segment,而在每个undo log segment段中进行undo页的申请。共享表空间偏移量为5的页(0,5)记录了所有rollback segment header所在的页,这个页的类型为FIL_PAGE_TYPE_SYS。

在InnoDB V1.1版本之前,只支持一个rolback segment,所以同时在线的事务限制为1024。从V1.1版本开始支持最大128个rollback segment,同时在线的事务限制提高到了128*1024个。

下面这三个餐素可以对rollback segment进行设置:

innodb_undo_directory:用于设置rollback segment文件所在的路径。即可以设置为独立表空间。默认值“.”,当前InnoDB存储引擎的目录。

innodb_undo_logs:用来设置roolback segment个数,默认值128。

inodb_undo_tablespaces:用来设置构成rollback segment文件的数量,这样rollback segment可以较为平均的分布在多个文件中。文件前缀为undo。

当事务提交时,InnoDB存储引擎会做以下动作:

1.将undo log放入列表中,供之后的purege操作。

2.判断undo log所在页是否可以重用,若可以分配给下一个事务使用。

事务提交后并不能马上删除undo及undo log所在的页。因为需要支持MVCC,为其他事务此时获取行记录之前的版本。事务提交时将undo log放入一个链表中,由purge线程来判断是否可以删除。

InnoDB存储引擎可以对undo页进行重用。首先undo log放入链表中,然后判断undo页的使用空间是否 小于3/4,如果是那么该undo页可以重用,之后新的undo log记录卸载当前undo log记录后面。

undo log分为insert undo log和update undo log两种。

insert undo log是在insert操作中产生的undo log,只对事务本身可见,其他事务部可见(隔离性)。所以在事务提交后,就没用了,可以直接删除。

update undo log是在delete和update操作中产生的undo log。因为支持MVCC机制的关系,不能直接删除。提交时房屋undo log链表中,等待purge线程进行最后的删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值