doc: 阅读mysql history list文档

This commit is contained in:
asahi
2025-08-18 12:44:45 +08:00
parent e2fe983467
commit 3f20f381a8

View File

@@ -550,3 +550,23 @@ innodb存储引擎中维护了一个history列表其`根据事务的提交顺
- 找到trx2 undo log所在的undo页然后清理trx 6和trx 4 - 找到trx2 undo log所在的undo页然后清理trx 6和trx 4
上述流程中purge会首先从history list中查找undo log然后会随便清除undo log位于的undo page中其他可以被清理的undo log`这样能够减少page的随机访问次数提高性能` 上述流程中purge会首先从history list中查找undo log然后会随便清除undo log位于的undo page中其他可以被清理的undo log`这样能够减少page的随机访问次数提高性能`
##### innodb_purge_batch_size
`innodb_purge_batch_size`用于设置每次purge操作需要清理的undo page数量该值默认为`300`
通常该值设置越大每次回收的undo page越多可供重用的undo page也越多会减少新开undo page的开销。但是该值设置过大时会增加purge占用的cpu和io资源令用户线程的资源减少。
##### innodb_max_purge_lag
当innodb存储引擎压力较大时并无法高效进行purge操作。此时history list长度会越来越长。
参数`innodb_max_purge_lag`用于控制history list的长度当history list长度大于`innodb_max_purge_lag`的值时(`innodb_max_purge_lag`值需大于0会对用户的DML操作进行延缓延缓算法如下
```
delay = ((length(history_list) - innodb_max_purge_lag) * 10) - 5
```
其中delay的值为ms且delay针对的是每一行。例如当一个update操作需要更新5行数据时每行数据都要被delay故而故而该update操作的总delay为`5 * delay`
delay会在每一次purge操作完成后重新计算。
##### innodb_max_purge_lag_delay
该参数用于控制delay的最大值。当基于公式计算出的delay大于`innodb_max_purge_lag_delay`delay的值取`innodb_max_purge_lag_delay`避免delay值过大导致用户线程无限等待。