文档首页/ 数据仓库服务 GaussDB(DWS)/ 故障排除/ 数据库连接管理/ 业务执行中报错:An I/O error occurred while sending to the backend
更新时间:2024-11-01 GMT+08:00

业务执行中报错:An I/O error occurred while sending to the backend

问题现象

使用客户端连接GaussDB(DWS)执行业务过程中出现报错“An I/O error occurred while sending to the backend.”。

原因分析

客户端与数据库之前建好的连接再使用时已经中断导致上述报错,连接中断通常有两种情况:

  • 数据库侧主动断开。

    当数据库侧由于某种原因将连接断开,应用侧再次使用此连接就会产生该报错。而数据库侧连接异常断开主要有三种原因:

    1. CN进程异常重启。
    2. session超时。
    3. 用户手动执行命令终止了session。
  • 客户端主动断开连接。

处理方法

数据库侧主动断开。针对以上三种情况的原因分析,对应的处理的方式如下:

  1. 查看CN进程是否异常重启:
    1
    ps -eo pid,lstart,etime,cmd | grep coo
    

    如果连接在CN进程启动之前就存在,那么CN进程重启之后,连接就会断开,业务侧继续使用则会报错。

  2. 会话设置了session_timeout(默认值10min,0表示关闭超时设置。)时间,当超过此时间,数据库会自动清理连接。对于需要保持长连接的场景。可通过客户端对此session设置session_timeout为预期时长。设置方式可参考session_timeout设置导致JDBC业务报错
  3. 排查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
    

客户端侧断开连接的处理方式:

如果经过数据库侧的排查,未发现数据库侧主动断开,则可能是客户端侧断开的情况。

  1. 可以排查客户端是否设置超时参数socketTimeout,调整该参数为合适的值。
  2. 排查网络,是否有网络问题导致连接中断。