MySQL 连接数打满排查实战:从连接池到 PROCESSLIST 定位慢请求
线上 MySQL 连接数打满时,业务侧看到的通常是接口超时、偶发 500、连接池等待变长。很多人第一反应是把 max_connections 调大,但这只能暂时缓解,真正要找的是:谁把连接占住了,连接是在排队、慢查询、还是长事务里卡住。
本文用一次订单服务连接数告警做例子,按“看全局指标、看活跃连接、看事务、看应用连接池”的顺序排查。目标不是背命令,而是建立一条遇到问题能照着走的链路。
摘要
本文会完成四个目标:判断连接数是否真的到顶、用 PROCESSLIST 找出连接状态、定位长时间占用连接的事务或查询、给出连接池和限流兜底建议。适合正在维护 MySQL 业务库、管理后台和高并发接口的后端开发者阅读。
适合人群
- 遇到过 “too many connections” 或连接池等待超时的开发者。
- 需要把数据库告警和应用请求链路对应起来的后端同学。
- 想把连接数问题从“调大参数”推进到“定位根因”的团队。
目录
- 先确认连接数压力来自哪里
- 用 PROCESSLIST 看连接状态
- 排查长事务和慢请求占用
- 应用连接池如何兜底
- 上线后的观察项
先确认连接数压力来自哪里
连接数告警出现时,不要只看当前连接数,还要看活跃连接数。大量 Sleep 连接通常指向连接池配置或空闲连接回收问题;大量 Query、Locked、Sending data 则更可能是慢请求或锁等待。
SHOW GLOBAL STATUS LIKE 'Threads_connected'; SHOW GLOBAL STATUS LIKE 'Threads_running'; SHOW VARIABLES LIKE 'max_connections';
Threads_connected 表示当前已建立连接数量,Threads_running 更接近正在工作的连接数量。如果前者很高、后者不高,优先看连接池和空闲连接;如果两者都高,就要继续看正在跑的 SQL 和等待状态。

用 PROCESSLIST 看连接状态
下一步查看当前连接在做什么。生产环境里建议先筛选非空闲连接,避免被大量空闲连接淹没。
SELECT ID, USER, HOST, DB, COMMAND, TIME, STATE, INFO FROM information_schema.PROCESSLIST WHERE COMMAND != 'Sleep' ORDER BY TIME DESC LIMIT 20;
重点观察三列:
- COMMAND:连接是在查询、空闲、复制还是其他状态。
- TIME:当前状态持续了多少秒,时间越长越值得看。
- STATE:是否出现等待锁、发送数据、复制到临时表等状态。
如果排在前面的连接都来自同一个接口、同一台应用机器,说明问题很可能在某个入口流量或某段 SQL 上。如果来自多个服务,就要回到连接池配置和数据库总体负载一起看。
排查长事务和慢请求占用
连接数打满不一定是瞬时流量,也可能是长事务长期占着连接。尤其是接口里先开启事务,再调用外部服务、生成文件、发送消息,就会把数据库连接拖住。
SELECT trx_id,
trx_started,
trx_mysql_thread_id,
TIMESTAMPDIFF(SECOND, trx_started, NOW()) AS trx_seconds
FROM information_schema.innodb_trx
ORDER BY trx_started
LIMIT 10;
拿到 trx_mysql_thread_id 后,可以回到 PROCESSLIST 查对应连接。这样就能知道长事务来自哪个账号、哪个主机、当前在什么状态。

把事务边界缩短
事务里只放必须保持一致的数据库读写,不要把远程接口、文件处理、复杂计算放在事务里。事务越短,连接被占用的时间越短,锁等待也更容易下降。
把慢查询拉回索引和条件
如果活跃连接主要卡在同一类查询上,就要继续看执行计划、索引和筛选条件。连接数问题经常只是表象,底层根因是某条 SQL 把连接拖得太久。
应用连接池如何兜底
数据库端要排查,应用端也要设置边界。连接池不是越大越好,如果每个服务实例都开很大的池,扩容应用时反而更容易把数据库连接打满。
- 最大连接数按实例数折算。 例如数据库可用连接 800,应用 20 个实例,单实例连接池就不能随手配置 100。
- 等待时间要有上限。 连接拿不到时快速失败或降级,避免请求堆积。
- 空闲连接要回收。 低峰期保留太多空闲连接,会挤占其他服务空间。
- 入口要有限流。 当连接池等待变长时,优先保护核心接口。
一个简单的估算方式是:
单实例最大连接数 = floor(数据库可用连接数 * 0.7 / 应用实例数)
这里的 0.7 是预留空间,给管理连接、任务脚本、其他服务和突发情况留余量。实际值还要结合请求耗时和并发量压测。
上线后的观察项
- 连接池等待时间。 如果等待时间上升,说明应用侧已经感受到数据库压力。
- Threads_connected 与 Threads_running。 前者看连接占用,后者看活跃压力。
- 慢查询数量。 突增时要关联接口发布时间、流量入口和 SQL 模板。
- 长事务数量。 持续超过几十秒的事务要重点关注。
- 错误率和超时率。 数据库连接问题通常会先体现在接口延迟和错误率上。
常见坑
- 只调大 max_connections。 连接变多会增加数据库压力,根因不解决会再次打满。
- 忽略空闲连接。 大量空闲连接可能来自连接池最小连接数过大或回收策略不合理。
- 事务里做慢操作。 事务边界太大,会同时放大连接占用和锁等待。
- 没有按服务拆指标。 只看数据库总连接数,很难判断是哪一个应用实例在放大问题。
总结
MySQL 连接数打满时,正确路径是先看全局连接和活跃连接,再用 PROCESSLIST 找连接状态,接着关联长事务、慢请求和应用连接池配置。参数可以临时止血,但长期稳定要靠缩短连接占用时间、控制入口并发、让每个服务都有明确的连接预算。
Python CSV 批量导入实战:分批校验、错误行回写和事务提交
- 上一篇
- Python CSV 批量导入实战:分批校验、错误行回写和事务提交
- 下一篇
- Go 错误链处理实战:用 errors.Is 和 errors.As 保留根因
-
- 数据库 · MySQL | 4天前 | 性能优化 · 执行计划 · MySQL教程 · 慢查询治理 · 数据库运维 · mysql GROUP BY优化 TempTable 内部临时表 Created_tmp_disk_tables
- MySQL 8.4 内部临时表实战:GROUP BY 一慢就先查 TempTable 有没有落盘
- 267浏览 收藏
-
- 数据库 · MySQL | 4天前 | 性能优化 · InnoDB · MySQL教程 · 数据库运维 · 高并发写入 · mysql innodb 批量写入 Change Buffer innodb_change_buffering
- MySQL 8.4 Change Buffer 实战:批量写入为什么没有把二级索引拖垮
- 270浏览 收藏
-
- 数据库 · MySQL | 1星期前 | 性能优化 · 高并发 · InnoDB · MySQL教程 · 数据库运维 · mysql innodb AUTO_INCREMENT 高并发写入 innodb_autoinc_lock_mode
- MySQL 8.4 自增主键并发写入实战:AUTO_INCREMENT 锁模式别再凭感觉调
- 254浏览 收藏
-
- 数据库 · MySQL | 1星期前 | 连接池 · 高并发 · 故障排查 · MySQL教程 · 数据库运维 · mysql 高并发 连接池 max_connections Too many connections
- MySQL 8.4 连接池雪崩实战:Too many connections 不是把 max_connections 调大就完事
- 491浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 8022次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 8455次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 8273次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 10180次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 9053次使用
-
- golang MySQL实现对数据库表存储获取操作示例
- 2022-12-22 499浏览
-
- 搞一个自娱自乐的博客(二) 架构搭建
- 2023-02-16 244浏览
-
- B-Tree、B+Tree以及B-link Tree
- 2023-01-19 235浏览
-
- mysql面试题
- 2023-01-17 157浏览
-
- MySQL数据表简单查询
- 2023-01-10 101浏览

