doc: 阅读mysql文档
This commit is contained in:
@@ -324,8 +324,27 @@ undo slot主要用于关联undo segment,`当事务启动时,系统会从roll
|
||||
##### undo segment
|
||||
undo segment为undo slot指向的空间,undo segment中包含多个undo pages,而undo segment中则包含了undo log。
|
||||
|
||||
|
||||
|
||||
#### undo log格式
|
||||
在innodb存储引擎中,undo log分为如下两种类型:
|
||||
- insert undo log:
|
||||
- insert undo log是事务在insert操作中产生的undo log
|
||||
- 在事务提交之前,事务插入的数据对其他事务不可见;而事务提交之后,事务插入的数据对其他读已提交的事务才可见;故而,insert undo log在事务提交之后不再被需要,因为在读已提交隔离级别下,insert undo log是可见的;在可重复读的隔离级别下,insert undo log则是不可见的,没有中间版本,只能可见/不可见
|
||||
- 故而,当事务提交之后,即可删除该事务关联的insert undo log
|
||||
- update undo log
|
||||
|
||||
##### insert undo log
|
||||
在事务提交之后,insert undo log即可被删除,故而无需purge操作。
|
||||
|
||||
insert undo log结构如下:
|
||||
- next:下一个undo log的位置,长度为2字节
|
||||
- type_impl: 记录undo的类型,对于insert undo来说,该值为11。该字段长度为1字节
|
||||
- undo_no:记录事务的id(压缩后保存)
|
||||
- table_id: 记录undo log对应的表对象(压缩后保存)
|
||||
- 记录所有主键的列和值(本次插入的数据,可能多条)
|
||||
- start:位于undo log尾部,记录undo log的开始位置,长度为2字节
|
||||
|
||||
> ##### rollback
|
||||
> 在执行rollback操作时,可以根据insert undo log中存储的table id,主键列、主键值来定位需要回滚的行数据,直接删除回滚数据即可。
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user