From 1da87e132c36fc45f5b83822498e8001af0b60ee Mon Sep 17 00:00:00 2001 From: asahi Date: Mon, 21 Jul 2025 00:29:01 +0800 Subject: [PATCH] =?UTF-8?q?doc:=20=E9=98=85=E8=AF=BBmysql=20innodb?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mysql/mysql文档/mysql_事务.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) 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。 + + +