是谁,把InnoDB表上的DML搞慢的?

本文涉及的产品
RDS AI 助手,专业版
RDS Agent(兼容OpenClaw),2核4GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介:

0、导读

突然发现MySQL服务器上InnoDB表的DML线程频繁被阻塞,TPS下降比较厉害,是什么原因导致?

1、问题

我的朋友小明(又是悲催的小明),发现有个MySQL数据库最近DML明显变慢了,执行SHOW PROCESSLIST总能看到DML线程状态,TPS下降也挺厉害的,不知道什么原因。

接到小明的求助,我第一反应是,可能有几个原因:

  1. 服务器的性能不足;

  2. InnoDB buffer pool size分配不够;

  3. 表DDL设计不合理,例如没有基于索引的SQL请求,或者InnoDB表没有使用自增列做主键,或索引太多;

  4. MySQL中有些SQL效率太低,影响整体性能;

  5. 当前有其他进程负载较大,影响到mysqld进程的性能;


那么到底是什么原因导致InnoDB表上的DML操作很慢呢,下面一起来一步步排查吧。

2、排查

2.1、查看整体负载

先执行top看系统负载,看看高不高,并确认瓶颈是否在mysqld进程:

可以看到,系统负载不算高,mysqld进程的CPU消耗比较大,疑似索引可能存在问题。

从top的结果也没看到有其他进程在和mysqld进程抢占资源,消耗cpu或内存等资源。

另外mysqld进程占用的内存不小,按理不应该是InnoDB buffer pool分配不足的原因了。不过,我们也注意到used很大,但buffers+cached不大,疑似发生内存泄露。

2.1、查看MySQL内部SQL请求

接下来我们看看MySQL内部的一些SQL请求,是否存在索引设计不当导致SQL效率太差的情况。

并没有耗时特别久的SELECT请求,排除这个因素。

同时也排除了因为表DDL设计不合理导致DML太慢的因素,这个的背景知识详见[MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键

排查到这里,似乎无解了?

等等,我们再来检查InnoDB status看看:

从上面这些信息里我们注意到几个重要信息:

  • un-Purge太大了,足有46万(History list length 462312,太大了);

  • 个别事务启动太久一直没提交(TRANSACTION 8682844862, ACTIVE 3235 sec,将近1个小时);

  • 个别事务里生成的undo太多(undo log entries 14365,一个事务里1万多undo,要死人的节奏);

  • buffer pool中的脏页不算多(Modified db pages  134050,约2GB,相对于总共90G的buffer pool才占2.2%,也还好);


基本可以怀疑是因为unpurge list太大,导致DML被阻塞了,看看InnoDB的几个选项确认下:


上面这2个配置选项的意思是:

1、当InnoDB检测到当前unpurge list大于10万时,就会阻塞所有的DML请求;

2、每次DML请求被阻塞延时至少是  ((purge_lag/innodb_max_purge_lag)×10)–5 毫秒,最大阻塞延时是1000毫秒(1秒)。在上面的例子中,最少被阻塞 (462312/430000)*10-5=5.7514 毫秒,最久1秒;


这就能很好解释为什么InnoDB表上的DML请求总是那么慢了。

但是,为什么unpurge会这么大呢,继续追根刨底。

我们先来看下 information_schema.innodb_trx 视图,这个视图记录了当前所有活跃事务列表:


共有3个活跃事务,其中最早的一个是04:39:02开始的,而当前时间是05:32:25,两者相差了将近1个小时。可见,是因为有个较早的事务,一直没有提交/回滚,导致这个unpurge的列表越来越大在InnoDB中,执行purge工作前要先判断哪些数据(主要是Undo Log,被标记为删除的数据,以及二级索引中被删除的记录)可以被删除

在本例中,因为有个事务长时间没提交,它有可能需要读取这些旧数据,所以是不能被purge的,直到确认没有任何事务需要读取这些旧数据时,才能将它们清除。

3、解决方案

至此,我们知道为啥DML会很慢的原因了,解决起来就简单了:

  • 及时提交长时间的事务,例如本例中应该及时提交线程ID为4886791的事务,实在找不到是哪个业务连接的话,就只能直接把这个线程给kill了。我在最近的几次大会上分享时,也提到应该及时杀掉长时间不活跃的连接,因为它们是有可能存在未提交的事务的。这个是治本的办法;

  • 设置autocommit=1,尤其应该检查一些gui客户端,例如MySQL Workbench、Navicat,它们极有可能在连接MySQL时采用autocommit=0的模式,应该调整过来。这个也算是治本的办法之一;

  • 在避免undo log暴涨的前提下,可以适当调大 innodb_max_purge_lag 值以允许存在更大的unpurge列表,还应适当调低 innodb_max_purge_lag_delay 值,降低每次DML被阻塞的耗时。这个是治标的办法,不太建议;



文章转自老叶茶馆公众号,原文链接:https://mp.weixin.qq.com/s/d5jbmdu1Yc5CG1jgIkTUCQ
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
16天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23521 12
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
4天前
|
Shell API 开发工具
Claude Code 快速上手指南(新手友好版)
AI编程工具卷疯啦!Claude Code凭借任务驱动+终端原生的特性,成了开发者的效率搭子。本文从安装、登录、切换国产模型到常用命令,手把手带新手快速上手,全程避坑,30分钟独立用起来。
1301 7
|
5天前
|
人工智能 BI 持续交付
Claude Code 深度适配 DeepSeek V4-Pro 实测:全场景通关与真实体验报告
在 AI 编程工具日趋主流的今天,Claude Code 凭借强大的任务执行、工具调用与工程化能力,成为开发者与自动化运维的核心效率工具。但随着原生模型账号稳定性问题频发,寻找一套兼容、稳定、能力在线的替代方案变得尤为重要。DeepSeek V4-Pro 作为新一代高性能大模型,提供了完整兼容 Claude 协议的 API 接口,只需简单配置即可无缝驱动 Claude Code,且在任务执行、工具调用、复杂流程处理上表现极为稳定。
1405 3
|
10天前
|
人工智能 缓存 Shell
Claude Code 全攻略:命令大全 + 实战工作流(完整版)
Claude Code 是一款运行在终端环境下的 AI 编码助手,能够直接在项目目录中理解代码结构、编辑文件、执行命令、执行开发计划,并支持持久化记忆、上下文压缩、后台任务、多模型切换等专业能力。对于日常开发、项目维护、快速重构、代码审查等场景,它可以大幅减少手动操作、提升编码效率。本文从常用命令、界面模式、核心指令、记忆机制、图片处理、进阶工作流等维度完整说明,帮助开发者快速上手并稳定使用。
2556 4
|
3天前
|
人工智能 JSON BI
DeepSeek V4-Pro 接入 Claude Code 完全实战:体验、测试与关键避坑指南
Claude Code 作为当前主流的 AI 编程辅助工具,凭借强大的代码理解、工程执行与自动化能力深受开发者喜爱,但原生模型的使用成本相对较高。为了在保持能力的同时进一步降低开销,不少开发者开始寻找兼容度高、价格更友好的替代模型。DeepSeek V4 系列的发布带来了新的选择,该系列包含 V4-Pro 与 V4-Flash 两款模型,并提供了与 Anthropic 完全兼容的 API 接口,理论上只需简单修改配置,即可让 Claude Code 无缝切换为 DeepSeek 引擎。
974 0
|
20天前
|
人工智能 缓存 BI
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro,跑完 Skills —— OA 审批、大屏、报表、部署 5 大实战场景后的真实体验 ![](https://oscimg.oschina.net/oscnet/up608d34aeb6bafc47f
6082 22
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
|
21天前
|
人工智能 JSON BI
DeepSeek V4 来了!超越 Claude Sonnet 4.5,赶紧对接 Claude Code 体验一把
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro 的真实体验与避坑记录 本文记录我将 Claude Code 对接 DeepSeek 最新模型(V4Pro)后的真实体验,测试了 Skills 自动化查询和积木报表 AI 建表两个场景——有惊喜,也踩
7344 18