文档首页/ 云数据库 RDS/ 故障排除/ RDS for PostgreSQL/ RDS for PostgreSQL数据库已有连接执行业务时报错
更新时间:2024-10-24 GMT+08:00

RDS for PostgreSQL数据库已有连接执行业务时报错

故障描述

客户端通过已有连接执行业务时,返回如下报错信息:

  • 故障一
    org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend. 
  • 故障二
    org.postgresql.util.PSQLException: The connection attempt failed 
    ... 
    Caused by: java.net.SocketException: Connection reset

故障一的解决方案

原因分析:

  • SQL语句参数过多
  • 连接被释放

解决方案:

  • 对于SQL语句参数过多的情况,需要自行排查业务,对包含较多参数SQL进行适当拆分。
  • 对于连接被释放导致报错的情况,排查客户端连接相关参数,如连接超时时间。业务上建议增加自动重试机制。

故障二的解决方案

这类问题是由于已有连接被释放掉,使用已经释放的连接会出现这个报错。可能原因主要有以下几种:

  • 网络链路问题
  • 数据库重启或后端进程crash
  • 空闲连接超时释放

解决方案:

  1. 首先排查网络连通性,判断是否有网络链路因素(丢包率、重传比例高)导致连接断开。
  2. 如果没有网络层面的问题,需要排查业务是否有其他报错导致连接断开。
  3. 如果业务上也没有其他报错,则尝试排查连接超时参数(如jdbc连接池参数sockettimeout和connecttimeout),如果设置值较小,会导致连接被主动释放。