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