如何排查连接到 Amazon RDS PostgreSQL 或 Aurora PostgreSQL 数据库实例时出现的错误“无法向客户端发送数据”或“无法从客户端接收数据”?

上次更新时间:2021 年 5 月 4 日

我尝试查询 Amazon Relational Database Service (Amazon RDS) PostgreSQL 或 Amazon Aurora PostgreSQL 兼容版数据库实例。但在我这样做时,我收到了以下错误:

  • “无法向客户端发送数据”
  • “无法从客户端接收数据”

简短描述

如果 Amazon RDS 数据库实例中的后端进程无法从客户端发送或接收数据,则后端进程会在 PostgreSQL 日志中记录以下错误:

  • “无法向客户端发送数据”
  • “无法从客户端接收数据”

解决方法

这些错误可能是由于多种原因造成的。查看以下步骤以排查此问题。

检查客户端是否为活动状态

首先检查客户端进程是否为活动状态。例如,如果客户端进程因 OOM 而崩溃,则会话可能会被错误终止。此终止可能会导致发生这些错误。

缩短 tcp_keepalives_idle 和 tcp_keepalives_interval 参数

如果查询的处理时间过长,则会话可能会从客户端错误终止。要解决此问题,请延长客户端的超时设置。您还可以缩短 tcp_keepalives_idletcp_keepalives_interval 参数,以检查后端进程中客户端是否为活动状态。有关更多信息,请参阅修改数据库参数组中的参数

要查看 tcp_keepalives_idletcp_keepalives_interval 的默认值,请使用 PostgreSQL 客户端(如 psql)运行以下命令:

SELECT name, setting FROM pg_settings WHERE name LIKE 'tcp_keepalives_%'

检查连接

如果无论查询处理时间是否减少都出现错误,请检查客户端和数据库实例之间的连接。

从 rdsadmin 会话进行故障转移之后

如果从 rdsadmin 会话进行故障转移后出现错误,则可以忽略该错误。


关于 PostgreSQL 错误代码的 PostgreSQL 文档

关于连接和身份验证的 PostgreSQL 文档

设置 TCP keepalive 参数

这篇文章对您有帮助吗?


您是否需要账单或技术支持?