---
title: SQL 执行过程报错 Connection reset -OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于SQL 执行过程报错 Connection reset 相关的常见问题和使用技巧，帮助您快速解决SQL 执行过程报错 Connection reset 的难题。
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# SQL 执行过程报错 Connection reset

更新时间：2025-06-17 09:01

适用版本： V3.1.x、V3.2.x、V3.3.x、V3.4.x、V4.0.x、V4.1.x、V4.2.x 内容类型：Troubleshoot  

## **问题现象**

### ODC 执行耗时 SQL 语句时报错

ODC 通过负载均衡（F5、SLB 等）访问 OceanBase 数据库，ODC 执行耗时 SQL 语句在固定间隔（此间隔大约是负载均衡配置的连接保活时间，如 SLB 一般是 15 分钟）会报错。

- 报错信息：

  ```shell
  Connection reset

  ```
 - 报错信息示例：

  ![1](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/odc/200.database-connection/400.error-connection-reset-after-executing-sql-statement/1.png)

### **使用命令行工具 OBClient 时报错**

- 报错信息：

  ```shell
  Lost connection to MySQL server during query

   ![](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/KB/3.common-troubleshooting/2.database-connection/4.error-connection-reset-after-executing-sql-statement/2.png)

## 问题原因

负载均衡产品（包括各种硬件、软件产品，如 F5、阿里云 SLB 等），一般都会提供连接报保活配置，避免因为应用的异常断连导致负载均衡组件内部连接资源无法释放。

ODC 服务端会周期性的检查连接的可用性（使用 select 1 from dual ），检查周期为 5 分钟。如果负载均衡配置的连接保活时间小于 5 分钟，或者某个 SQL 语句的执行时间超过了负载均衡配置的保活时间，连接会被负载均衡组件主动断开。

#### 说明

此问题在 MySQL、Oracle 租户均存在。如果只在 Oracle 模式出现连接中断问题，原因如下：  
Oracle 模式下，如果 autocommit=OFF，连接如果无任何新的命令执行，会在 `ob_trx_idle_timeout` 时间后被 OBServer 中断。  
`ob_trx_idle_timeout` 租户变量：事务空闲超时时间，即事务中两条语句之间的执行间隔超过该值时超时。单位：微秒。

## **解决方法**

1. 修改 OBProxy 的连接保活配置，确保

      - 已开启连接保活 client_sock_option_flag_out=2
      - 设置client_tcp_user_timeout 值。推荐设置为 0，或者至少大于 client_tcp_keepintvl 的值。

       #### 注意

            - 修改 OBProxy 配置需要使用 root@proxysys账号，否则修改无效。
            - 如为 OCP 管理的 OBProxy 集群，用户可以通过 OCP 修改 OBProxy 配置。
            - 该配置原理：负载均衡节点会根据连接是否有网络包发送判断连接是否有效，如果一个连接在一段时间之内（例如 15 分钟） 无任何网络包，则判定连接失效并主动断开连接。 OBProxy 开启连接保活，5 秒发送一个 keepalive 包，这样负载均衡节点就会认为连接使用是活跃的，不会主动断开连接。

   OBProxy 客户端连接 tcp keeplive 的相关参数说明：

   | **参数** | **说明** |
   | --- | --- |
   | client_sock_option_flag_out | client 端 socket 选项，bit 1: NO_DELAY, bit 2: KEEP_ALIVE。 |
   | client_tcp_keepidle | 表示启动 keepalive 时长。 |
   | client_tcp_keepintvl | 表示启动 keepalive 后，发送一次探活包时长。 |
   | client_tcp_keepcnt | 表示启动 keepalive 后，未收到响应的探活包数量，此情况表示已断开连接。 |
   | client_tcp_user_timeout | 等待 TCP 层 ACK 确认信息的超时时长，超过时 OBProxy 会主动断开连接。   #### 注意    此配置项的值应大于 client_tcp_keepintvl 配置项的值，OBProxy 推荐设置为 0，否则在网络状况不佳时（如出现丢包情况）会导致连接被 OBProxy 中断。 |
 2. 使用 OBClient 命令行工具查看当前配置，通过 root@proxysys 账号连接 OBProxy。

   ```shell
   -- 查看当前配置
   show proxyconfig like 'client_sock_option_flag_out';
   show proxyconfig like 'client_tcp%';

   ```
 3. 推荐的配置。

   ```shell
   alter proxyconfig set client_sock_option_flag_out=2
   alter proxyconfig set client_tcp_keepidle=5
   alter proxyconfig set client_tcp_keepintvl=5
   alter proxyconfig set client_tcp_keepcnt=5
   alter proxyconfig set client_tcp_user_timeout=0

   ```

上一篇

[打开或测试连接报错 Timeout](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000262287)

下一篇

[进入连接后报错 socket write error 或者 closed by server](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000262289) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
