diff --git a/mysql/mysql文档/mysql_事务.md b/mysql/mysql文档/mysql_事务.md index 2c9374e..67a024a 100644 --- a/mysql/mysql文档/mysql_事务.md +++ b/mysql/mysql文档/mysql_事务.md @@ -299,7 +299,7 @@ innodb通过segment来管理undo log,其管理方式如下: 该变量设置了undo tablespaces的数量。 ##### purge -在事务i提交之后,并不能立刻删除undo log以及undo log所在的页,`其他事务仍有可能通过undo log来还原数据行的之前版本`。故而,在事务提交时,会将undo log放入到一个链表中,交由purge线程来决定是否最终删除undo log以及undo log所在的页。 +在事务提交之后,并不能立刻删除undo log以及undo log所在的页,`其他事务仍有可能通过undo log来还原数据行的之前版本`。故而,在事务提交时,会将undo log放入到一个链表中,交由purge线程来决定是否最终删除undo log以及undo log所在的页。 > purge代表`清空不再被需要的旧版本数据行及其对应的undo log记录。 @@ -308,6 +308,8 @@ innodb通过segment来管理undo log,其管理方式如下: ##### undo页的重用设计 在innodb对undo页的设计中,考虑了对undo页的重用。当事务提交时,首先会将undo log放在链表中,然后判断undo页的使用空间是否小于`3/4`。如果是,代表该undo页可以被重用,之后新的undo log会记录在当前undo log的后面。 +> 即undo page是可被重用的,当事务提交时,如果undo log的使用空间小于3/4,那么该undo页是可以被重用的,一个undo页中可能包含多个undo log + #### 核心概念 ##### rollback segment undo tablespace由rollback segment构成,每个undo tablespace最多支持128个rollback segment,`innodb_rollback_segments`定义了rollback segments的数量。 @@ -315,7 +317,15 @@ undo tablespace由rollback segment构成,每个undo tablespace最多支持128 ##### undo slots undo slot是rollback segment内的slot,由rollback segment进行管理。 -undo slot主要用于关联undo segment,`当事务启动时,系统会从rollback segment中获取一个空闲的undo slot`,`成功获取undo slot后即代表关联了一个undo segment` +undo slot主要用于关联undo segment,`当事务启动时,系统会从rollback segment中获取一个空闲的undo slot`,`成功获取undo slot后即代表关联了一个undo segment`。 + +每个undo log slot中会存储一个`page_no`,其指向undo log segment的起始页位置。 + +##### undo segment +undo segment为undo slot指向的空间,undo segment中包含多个undo pages,而undo segment中则包含了undo log。 + + +