doc: 阅读mysql history list文档
This commit is contained in:
@@ -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值过大导致用户线程无限等待。
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user