doc: 阅读undo log文档

This commit is contained in:
asahi
2025-08-09 17:01:52 +08:00
parent 3ab6dfcb48
commit ed2324ccb2

View File

@@ -460,6 +460,28 @@ rollback segment header中包含了128个slot每个slot包含4字节并且
undo slot的数量会影响innodb数据库中的事务并行程度 undo slot的数量会影响innodb数据库中的事务并行程度
#### 内存组织方式
innodb中针对undo log的内存数据奇结构如下
<img src="https://yqintl.alicdn.com/70a8768288fddc5a8e5b9c0845e004e374392211.png" alt="7" title="7" data-spm-anchor-id="a2c65.11461447.0.i1.319b654a1qaiie">
##### undo::Tablespace
对于磁盘中的每个undo tablespace都会在内存中维护一个`undo::Tablespace`结构,`undo::Tablespace`结构中,最重要的部分是`trx_rseg_t`
##### trx_rseg_t
`trx_rseg_t`关联了rollback segment header。除了基础元数据之外其还包含了四个`trx_undo_t`类型的链表:
- Update List: update list中包含`用于记录update undo record的undo segments`
- Update Cachedupdate cached list中包含可以被重用的update undo segments
- Insert Listinsert list中包含了正在使用的insert undo segments
- Insert Cachedisnert cached list中包含了后续可以被重用的insert undo segments
##### trx_undo_t
trx_undo_t关联的则是上面描述的undo segment。
#### undo writing
当一个写事务开启时,将会通过`trx_assign_rseg_durable`分配Rollback Segment内存中的trx_t也会指向对应的trx_rseg_t内存结构。
rollback segment的分配策略很简单会依次尝试下一个活跃的rollback segment。在此之后如果事务内的第一条修改命令需要写undo record将会调用`trx_undo_assign_undo`来获取undo segment。在获取undo segment时`trx_rseg_t`中包含的cached list中节点将会被优先使用。sa
### purge ### purge
`t`中,`a`为聚簇索引,`b`为辅助索引若执行如下sql `t`中,`a`为聚簇索引,`b`为辅助索引若执行如下sql
```sql ```sql