doc: 阅读mysql innodb文档

This commit is contained in:
asahi
2025-07-21 00:29:01 +08:00
parent 92dc46a702
commit 1da87e132c

View File

@@ -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。