标准答案
- 连接泄漏表现为活跃或借出连接持续增长、归还率异常,即使流量回落也不恢复;应检查异常路径和资源关闭逻辑。
- 慢查询表现为连接被正常使用但持有时间变长,需看 SQL 耗时、返回行数、执行计划和 I/O。
- 锁等待或下游阻塞会让 SQL 看似没有执行 CPU,却长时间占用连接;应查看等待事件、事务和网络状态。
- 连接池大小不是越大越好,超过数据库可处理并发会让上下文切换、排队和内存压力更严重。
- 应设置获取连接超时、查询超时、事务超时和告警,并让应用在池饱和时快速失败或限流而不是无限排队。
题目解析
连接池是并发闸门。池满时继续堆请求会让线程、协程或事件循环也被占住,最终业务看起来像“所有接口都慢”。因此诊断不能只看数据库连接数,还要看请求排队和上游重试是否在放大问题。
连接泄漏和慢查询的处理方向完全不同:前者要修资源生命周期,后者要优化 SQL 或下游依赖。把两者都通过增大池解决,通常只会推迟并扩大故障。
常见误区
- 连接池满后只调大 max connections,没有检查数据库和应用能否承受更多并发。
- 在异常路径遗漏事务回滚或连接释放,压力下才逐渐耗尽。