TiDB 客户端连接时报 too many connections 故障

测试 TiDB 集群,业务程序频繁创建数据库连接未正常关闭,一段时间后所有新查询执行失败,客户端抛出报错 too many connections,已连接的会话还能正常操作数据。

用explain analyze分析SQL执行计划。

程序连接泄漏,频繁新建连接却未关闭,占用满 TiDB 全局最大连接数

看看processlist,tidb默认活跃连接数有好像是1000上限

确认版本和集群拓扑,检查各组件状态。

连接数超了, 执行SHOW PROCESSLIST查看会话,定位并清理无效连接

  • 报错:too many connections = TiDB 全局最大连接数被打满
  • 存量旧连接正常可用、新建连接直接拒绝:完全符合连接泄漏特征(应用频繁新建连接、未执行 close 释放,连接堆积耗尽配额);
  • TiDB 默认系统变量:max_connections 全局默认 4096

很多人登录吗?

业务创建连接不关闭,数据库连接数满了,无法新建连接。

学习了

– 查看最大连接数
mysql> SHOW VARIABLES LIKE ‘max_connections’;
– – 查看总连接数
mysql> SELECT COUNT(*) FROM information_schema.processlist;

业务程序需要设计最大连接数和最长连接时间呀

这是连接泄漏:客户端不断新建连接却不归还/关闭,触达 max_connections 后新连接被拒,已有会话仍可用。处理:业务侧改用连接池并保证 close/归还;查 information_schema.PROCESSLIST / CLUSTER_PROCESSLIST 看连接来源;临时调大 max_connections 只是缓冲,根治是修泄漏。也可用 wait_timeout 回收空闲连接。

链接上限了吗