1. 问题描述
在 Mysql 数据目录中发现有个 undo 文件非常大,并且持续增长

- 并且 History list length 非常大
------------
TRANSACTIONS
------------
Trx id counter 3569860310
Purge done for trx's n:o < 3185146100 undo n:o < 0 state: running but idle
History list length 194564756
LIST OF TRANSACTIONS FOR EACH SESSION:
- 并且可能会发现同时如下问题:
- Mysql 的性能在下降,TPS 并不高的情况下 IO wait 非常高,服务器负载也上升。
- 如果是从库,那么主从复制延迟也会增加。
2. 排查过程
-
背景知识: History list length是指在回滚空间中的未清除事务数。随着事务的提交,它的值会增加;随着清除线程的运行,它的值会减小。
-
实例: 发现 主库的 History list length 值正常,从库的 History list length 非常大
-
此时可能有如下问题表现:
- 主从复制延迟增大
- 数据库数据读写慢,性能降低, iowait 较高。
- 从库的 undolog 无限膨胀, 或者 innodb_undo_log_truncate 机制未生效,无法收缩 undolog 文件的大小。
- 由于较长的 InnoDB 历史记录列表会减慢数据库关闭速度,因此在启动涉及数据库关闭的操作之前,请减小列表大小
-
查看发现未提交的事物,可见这个事物长达几个月没有结束。
mysql> SELECT * FROM information_schema.INNODB_TRX\G *************************** 1. row *************************** trx_id: 421966903910096
-




2045

被折叠的 条评论
为什么被折叠?



