【Mysql 数据库 undo log 文件无限膨胀,性能下降问题解决方案】

数据库 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 增加,因为未处理的事务会保留在undo日志中,此时 undo log 就会膨胀。
  • 长查询和事务锁会导致 History list length 增加,因为相关的undo日志无法被及时清理,此时 undo log 就会膨胀。
  • Mysql 写入负载太重
  • 存在失败的垃圾事务,并且无法清理掉。

3. 问题排查过程

  • 使用sys.session或sys.processlist视图来查找活动事务。

    SELECT * FROM sys.session WHERE trx_state IS NOT NULL;

  • 使用 SHOW ENGINE INNODB STATUS; 命令查看InnoDB的状态信息,特别关注 TRANSACTIONS 部分,重点关注History list length , 以及是否存在死锁 。
    在这里插入图片描述

  • SELECT * FROM information_schema.INNODB_TRX; 查看当前正在运行的事务
    在这里插入图片描述

    • 在 show processlist; 中也会发现这个语句!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值