You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postgres客户端大量空闲连接(空查询/DISCARD ALL)与RDS Proxy关联排查

问题分析与解答

1. 空闲连接查询字段为空或执行DISCARD ALL的含义

  • 查询字段为空:说明当前连接处于空闲状态,没有正在执行的SQL语句,仅维持着与数据库的会话连接。
  • 执行DISCARD ALL:这是PostgreSQL的内置命令,作用是重置会话状态——清理临时表、释放保存点、重置会话级配置参数、取消预备语句等。通常是连接池(包括RDS Proxy)在回收连接、准备复用给下一个请求时执行的操作,目的是确保新请求拿到的是“干净”的会话环境,避免前一个请求的会话状态干扰后续请求。

2. query_start时间持续更新的原因

这个现象和RDS Proxy的连接复用机制直接相关:

  • RDS Proxy会维护一个与RDS实例的连接池,当服务端的连接归还到Proxy的连接池后,Proxy不会立即关闭它,而是会定期执行DISCARD ALL来重置会话,每次执行该命令时,query_start就会被更新为当前时间。
  • 即使连接处于空闲状态,Proxy的保活或清理操作也会触发这个时间戳更新,所以你看到的query_start始终是最近的时间,这并不代表有查询在持续执行,只是Proxy维护连接池的操作痕迹。

3. 是否由RDS Proxy导致?连接是否被阻塞?

  • 这个现象确实是RDS Proxy的正常行为,并非连接阻塞:
    • 连接阻塞通常会表现为wait_event字段有具体的等待类型(比如锁等待、IO等待),且query_start会停留在阻塞开始的时间,不会持续更新。
    • 你看到的情况是Proxy在管理连接池的常规操作,空闲连接被Proxy保持并定期清理状态,等待下一次被服务请求复用。
  • 补充:如果是服务端的原生连接池(比如Node.js的pg-pool、Spring Boot的HikariCP),也可能出现类似的DISCARD ALL操作,但结合query_start持续更新的特征,更符合RDS Proxy的连接池管理逻辑——因为Proxy会主动维护后端连接的状态,而非完全依赖服务端的连接池行为。

内容的提问来源于stack exchange,提问作者Selvakumar Ponnusamy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 06:58:28