doc: 阅读mysql文档
This commit is contained in:
@@ -324,8 +324,27 @@ undo slot主要用于关联undo segment,`当事务启动时,系统会从roll
|
|||||||
##### undo segment
|
##### undo segment
|
||||||
undo segment为undo slot指向的空间,undo segment中包含多个undo pages,而undo segment中则包含了undo log。
|
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