doc: 阅读mysql事务文档

This commit is contained in:
asahi
2025-08-14 21:00:40 +08:00
parent dee8180b4d
commit d4bf768fe3

View File

@@ -539,3 +539,14 @@ delete from t where a=1;
#### history
innodb存储引擎中维护了一个history列表`根据事务的提交顺序`对undo log进行链接`在history list中先提交的事务其undo log位于history list的尾端`
<img src="https://img-blog.csdnimg.cn/8bf680dd74014ed593d9f51a06448667.png" alt="Mysql undo log_mysql undolog-CSDN博客" class=" nofocus" tabindex="0" aria-label="Mysql undo log_mysql undolog-CSDN博客" role="button" data-bm="6">
##### history的purge流程
已知先提交的事务位于history list的尾端故而purge操作会从尾端开始查找需要被清理的记录。以上图为例purge操作执行流程如下
- 从尾端找到第一个需要被清理的记录此处为trx1
- 清理完trx1之后其会在trx 1的undo log为位于的undo page中继续查找是否可清空其他记录此处可以找到`trx3``trx5被其他事务引用不能清理
- 再次去history list中查找找到trx2清理trx2
- 找到trx2 undo log所在的undo页然后清理trx 6和trx 4
上述流程中purge会首先从history list中查找undo log然后会随便清除undo log位于的undo page中其他可以被清理的undo log`这样能够减少page的随机访问次数提高性能`