【Mysql 数据库 History list length 超长, 且undo log 文件无限膨胀,性能下降等问题解决方案】

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 非常大

    • 此时可能有如下问题表现:

      1. 主从复制延迟增大
      2. 数据库数据读写慢,性能降低, iowait 较高。
      3. 从库的 undolog 无限膨胀, 或者 innodb_undo_log_truncate 机制未生效,无法收缩 undolog 文件的大小。
      4. 由于较长的 InnoDB 历史记录列表会减慢数据库关闭速度,因此在启动涉及数据库关闭的操作之前,请减小列表大小
    • 查看发现未提交的事物,可见这个事物长达几个月没有结束。

      mysql> SELECT * FROM information_schema.INNODB_TRX\G
      *************************** 1. row ***************************
                          trx_id: 421966903910096
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值