更新时间:2024-07-02 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
- 空闲连接超时释放
解决方案:
- 首先排查网络连通性,判断是否有网络链路因素(丢包率、重传比例高)导致连接断开。
- 如果没有网络层面的问题,需要排查业务是否有其他报错导致连接断开。
- 如果业务上也没有其他报错,则尝试排查连接超时参数(如jdbc连接池参数sockettimeout和connecttimeout),如果设置值较小,会导致连接被主动释放。
父主题: RDS for PostgreSQL