TiDB 连接数满导致无法新建连接,如何排查与优化?

线上集群频繁出现连接数打满,新客户端连接失败,除调大连接数上限外,还有哪些排查方向和优化手段?

2 个赞

除调大 max_connections 外,建议从以下方向排查优化:

  1. 连接泄漏:检查应用是否未正确关闭连接(如 close() 遗漏)。通过 SHOW PROCESSLIST 查看大量 Sleep 状态的空闲连接。
  2. 连接池配置:应用连接池的 maximumPoolSize 是否过大?idleTimeout 是否太长?
  3. 长事务/慢 SQL:长事务持有连接不释放。查看 SHOW PROCESSLISTTime 过长的查询。
  4. 中间件/负载均衡:连接数被 LB、Proxy 或 Sidecar 耗尽(如 Envoy 的连接池)。
  5. 操作系统限制:检查文件句柄数、端口范围(net.ipv4.ip_local_port_range)是否不足。
  6. 非预期连接:监控工具、巡检脚本、备份任务意外建立大量持久连接。

优化手段:

  • 设置合理的 wait_timeoutinteractive_timeout 自动回收空闲连接。
  • 应用侧改用连接池并配置合理的 maximumPoolSizeconnectionTimeout
  • 使用 max_user_connections 按用户限制连接数。
    :grinning:
1 个赞

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。