当前位置:首页 > 文章列表 > 数据库 > MySQL > MySQL 8.4 连接池雪崩实战:Too many connections 不是把 max_connections 调大就完事

MySQL 8.4 连接池雪崩实战:Too many connections 不是把 max_connections 调大就完事

来源:17golang 原创 2026-06-05 10:23:34 0浏览 收藏

凌晨一点,业务报警不是慢查询,而是连接失败:ERROR 1040 (HY000): Too many connections。很多人第一反应是把 max_connections 从 800 调到 2000。我一般会先拦一下,因为这类事故最怕把保险丝换成铁丝。

MySQL 8.x 里,max_connections 决定普通客户端连接上限;到达上限后,新的普通连接会被拒绝。MySQL 8 也提供管理连接相关能力,方便在连接打满时保留排障入口。本文不讲客户端框架,只站在 MySQL 侧,把连接池雪崩怎么复现、怎么诊断、怎么上线收口讲清楚。

MySQL 连接池雪崩治理脑图
脑图:连接打满不是一个参数问题,而是连接池、慢 SQL、长事务和容量规划一起出问题。

先复现:为什么小流量也能打满连接

假设一个订单服务有 24 个副本,每个副本连接池最大 50,光这一个服务理论上就能占 1200 条连接。如果 MySQL 实例 max_connections=1000,再加上后台任务、报表、运维连接和复制连接,事故已经写在配置里了。

SHOW VARIABLES LIKE 'max_connections';
SHOW GLOBAL STATUS LIKE 'Threads_connected';
SHOW GLOBAL STATUS LIKE 'Threads_running';
SHOW GLOBAL STATUS LIKE 'Max_used_connections';
SHOW GLOBAL STATUS LIKE 'Connection_errors_max_connections';

这里要分清两个指标:Threads_connected 高,说明连接占用多;Threads_running 高,说明正在执行的线程多。如果 connected 高但 running 不高,常见原因是连接池开太大或连接泄漏。如果 running 也高,就要继续查慢 SQL、锁等待和长事务。

事故现场先保命:别把 DBA 挡在门外

连接打满时,最尴尬的是应用连不上,DBA 也连不上。MySQL 8 可以规划管理连接入口,生产上至少要有一条排障通道和一个不被业务连接池使用的管理账号。没有这条通道,现场只能等连接自然释放,或者冒险杀进程。

MySQL Too many connections 排障流程
流程图:先保留排障入口,再拆连接来源,最后决定调池还是调 MySQL。

定位来源:谁占住了连接

连接问题不要只看总数,要看账号、来源主机、状态和持续时间。下面这些 SQL 足够在现场先摸清方向。

SELECT user, host, db, command, time, state
FROM information_schema.processlist
ORDER BY time DESC
LIMIT 30;

SELECT user, host, current_connections, total_connections
FROM sys.user_summary_by_statement_latency
ORDER BY current_connections DESC
LIMIT 20;

如果大量连接处于 Sleep,先查连接池最小空闲、最大连接、空闲回收和泄漏。如果大量连接卡在同一种 state,比如 waiting for lock 或 sending data,就不要急着调连接数,先回到 SQL、索引和事务。

MySQL 连接池诊断 SQL 案例
案例图:现场先看 Threads、Max_used_connections 和 processlist,再判断是池太大还是 SQL 堵住。

连接池容量怎么估

我的经验是反过来算:先给 MySQL 实例留出管理、复制、定时任务和临时排障余量,再把剩余连接按服务重要性分配。不要让所有服务的连接池最大值简单相加后超过实例上限。

可分配业务连接 = max_connections - 管理余量 - 复制/任务余量
单服务池上限 = floor(服务连接预算 / 服务副本数)

例如 max_connections=1000,预留 100 给管理和后台,核心订单服务 30 个副本,如果给它 450 条预算,每个副本池上限就不应该超过 15。这个数字看着保守,但比 30 个副本各开 50 然后一起冲垮数据库可靠得多。

什么时候才调大 max_connections

只有在确认 CPU、内存、线程调度、SQL 延迟都能承受,并且连接数上限确实成为瓶颈时,我才会调大 max_connections。调之前要评估每条连接的内存开销、峰值并发 SQL、线程栈和临时内存风险。否则你只是允许更多请求进入数据库排队。

SET PERSIST max_connections = 1200;
SHOW VARIABLES LIKE 'max_connections';

生产上我更推荐先调连接池和超时:降低最大池、缩短空闲回收、设置合理连接获取超时,并在熔断侧限制重试风暴。MySQL 侧调大上限通常是配套动作,不是第一动作。

上线检查清单

  • 确认所有服务副本数和连接池最大值,算出理论最大连接总和。
  • 为 DBA、复制、备份、迁移任务预留连接,不要让业务池吃满。
  • 监控 Threads_connectedThreads_runningMax_used_connections 和连接错误计数。
  • 对连接获取失败设置退避,避免失败后立刻重试形成风暴。
  • 压测时同时观察 SQL 延迟、锁等待和活跃线程,不只看 QPS。
  • 如果调整 max_connections,同步评估内存和线程调度风险。

总结

Too many connections 不是一句“数据库连接数太小”就能解释。它经常是连接池配置、服务副本数、慢 SQL、长事务和重试策略叠在一起的结果。真正稳的处理方式是:先保住排障入口,再拆连接来源,最后让连接池预算和 MySQL 承载能力对齐。

如果你只把 max_connections 调大,短期可能不报警,长期会让更多请求挤进数据库,把慢 SQL 和锁等待放大。把连接当容量资源来治理,才是高并发 MySQL 系统该有的基本功。

版本声明
本文转载于:17golang 原创 如有侵犯,请联系study_golang@163.com删除
JDK 24/25 虚拟线程 pinning 排查:synchronized 还会把吞吐卡住吗JDK 24/25 虚拟线程 pinning 排查:synchronized 还会把吞吐卡住吗
上一篇
JDK 24/25 虚拟线程 pinning 排查:synchronized 还会把吞吐卡住吗
Spring Boot 3.5 结构化日志实战:别让 JSON 日志变成新的噪音
下一篇
Spring Boot 3.5 结构化日志实战:别让 JSON 日志变成新的噪音
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • ljg-skills -
    ljg-skills
    ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
    2573次使用
  • MELO音乐 - AI 音乐生成平台,支持多模态创作能力
    MELO音乐
    MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
    2379次使用
  • UniScribe - AI 免费在线音视频转文字平台
    UniScribe
    UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
    2320次使用
  • 剧云 - 免费 AI 智能中文剧本创作平台
    剧云
    剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
    2529次使用
  • 万象有声 - AI 一站式有声内容创作平台
    万象有声
    万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
    2510次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码