如何排查连接到 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_idle 和 tcp_keepalives_interval 参数,以检查后端进程中客户端是否为活动状态。有关更多信息,请参阅修改数据库参数组中的参数。
要查看 tcp_keepalives_idle 和 tcp_keepalives_interval 的默认值,请使用 PostgreSQL 客户端(如 psql)运行以下命令:
SELECT name, setting FROM pg_settings WHERE name LIKE 'tcp_keepalives_%'
检查连接
如果无论查询处理时间是否减少都出现错误,请检查客户端和数据库实例之间的连接。
从 rdsadmin 会话进行故障转移之后
如果从 rdsadmin 会话进行故障转移后出现错误,则可以忽略该错误。