doc: 阅读undo log文档
This commit is contained in:
@@ -460,6 +460,28 @@ rollback segment header中包含了128个slot,每个slot包含4字节,并且
|
||||
|
||||
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 Cached:update cached list中包含可以被重用的update undo segments
|
||||
- Insert List:insert list中包含了正在使用的insert undo segments
|
||||
- Insert Cached:isnert 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
|
||||
表`t`中,`a`为聚簇索引,`b`为辅助索引,若执行如下sql
|
||||
```sql
|
||||
|
||||
Reference in New Issue
Block a user