业务执行中报错:An I/O error occurred while sending to the backend
问题现象
使用客户端连接GaussDB(DWS)执行业务过程中出现报错“An I/O error occurred while sending to the backend.”。
原因分析
客户端与数据库之前建好的连接再使用时已经中断导致上述报错,连接中断通常有两种情况:
处理方法
数据库侧主动断开。针对以上三种情况的原因分析,对应的处理的方式如下:
- 查看CN进程是否异常重启:
1
ps -eo pid,lstart,etime,cmd | grep coo
如果连接在CN进程启动之前就存在,那么CN进程重启之后,连接就会断开,业务侧继续使用则会报错。
- 会话设置了session_timeout(默认值10min,0表示关闭超时设置。)时间,当超过此时间,数据库会自动清理连接。对于需要保持长连接的场景。可通过客户端对此session设置session_timeout为预期时长。设置方式可参考session_timeout设置导致JDBC业务报错。
- 排查CN日志是否含有due to。
根据日志中相应时间分析,是否有用户手动执行select pg_terminate_backend(pid); 终止了会话,大多数情况是用户操作产生。
1
ERROR: dn_6003_6004: abort transaction due to concurrent update test 289502.
1
FATAL: terminating connection due to administrator command
客户端侧断开连接的处理方式:
如果经过数据库侧的排查,未发现数据库侧主动断开,则可能是客户端侧断开的情况。
- 可以排查客户端是否设置超时参数socketTimeout,调整该参数为合适的值。
- 排查网络,是否有网络问题导致连接中断。