TiDB 程序连接频繁断开,空闲一段时间后无法查询故障

业务服务与 TiDB 建立长连接,短时间内操作数据正常,若连接空闲几分钟,再次执行 SQL 直接报错连接断开,重启应用重建连接就能临时恢复;集群 TiDB Server 默认参数未改动,服务器防火墙无拦截规则。

你这个问题是典型的网络中间设备回收空闲连接导致的 “假死连接” 问题,和 TiDB 服务端 wait_timeout(默认 8 小时)无关。建议优先从应用侧连接池解决,这也是 TiDB 官方推荐的方案:请在你的业务连接池里开启 testOnBorrowtestWhileIdle 配置,用 SELECT 1 这类轻量 SQL 做连接探活,比如 Druid 可以设置 timeBetweenEvictionRunsMillis=300000(每 5 分钟探活一次),主动清理被中间设备回收的无效连接;同时可以检查下应用到 TiDB 之间的负载均衡器、NAT 网关等设备的空闲连接超时配置,把超时时间调长(比如超过 30 分钟),或确认 TiDB 的 tcp-keep-alive 参数已开启(默认开启),也可以配合调整 Linux 内核 TCP 保活参数,缩短探测间隔,从根源上避免空闲连接被回收。

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