From 3f20f381a8254c240fd8027472e2cbb157dae90e Mon Sep 17 00:00:00 2001 From: asahi Date: Mon, 18 Aug 2025 12:44:45 +0800 Subject: [PATCH] =?UTF-8?q?doc:=20=E9=98=85=E8=AF=BBmysql=20history=20list?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mysql/mysql文档/mysql_事务.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/mysql/mysql文档/mysql_事务.md b/mysql/mysql文档/mysql_事务.md index c3ef1b4..4521e72 100644 --- a/mysql/mysql文档/mysql_事务.md +++ b/mysql/mysql文档/mysql_事务.md @@ -550,3 +550,23 @@ innodb存储引擎中维护了一个history列表,其`根据事务的提交顺 - 找到trx2 undo log所在的undo页,然后清理trx 6和trx 4 上述流程中,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值过大导致用户线程无限等待。 +