---
title: 影响 OceanBase 数据库连接超时的相关配置-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于影响 OceanBase 数据库连接超时的相关配置相关的常见问题和使用技巧，帮助您快速解决影响 OceanBase 数据库连接超时的相关配置的难题。
---
切换语言

- 简体中文
- English

划线反馈

# 影响 OceanBase 数据库连接超时的相关配置

更新时间：2026-06-23 08:06

适用版本： V2.1.x、V2.2.x、V3.1.x、V3.2.x 内容类型：TechNote  

本文介绍 OceanBase 数据库中，和 OBServer 超时、OBProxy 超时以及应用使用 JDBC 超时的相关配置。

在 OceanBase 数据库生产环境中，在排除了网络防火墙的连接超时外，还会存在以下三种连接超时的情况：

- OBServer 超时
 - OBProxy 超时
 - 应用使用 JDBC 超时

本文主要介绍影响以上三种情况的参数配置。

## OBServer 超时

影响 OBServer 超时的参数有 `ob_query_timeout` 和 `ob_trx_timeout`。

- `ob_query_timeout` 是一个会话级变量，表示 OBServer 执行一条 SQL 语句的超时时间。当 SQL 在OBServer 端执行时间超过 `ob_query_timeout` 时，OBServer 会返回一个 ERROR 包给客户端，错误码为 4012。

  该参数默认为 10000000，单位是微秒，即 10 秒。可以通过以下几种方式设置。

  示例，设置事务超时时间为 864000000 微秒，即 864 秒。

     - Session 生效。

      ```shell
      SET ob_query_timeout =864000000;

      ```
     - Global 生效。

      ```shell
      SET GLOBAL ob_query_timeout =864000000;

      ```
 - `ob_trx_timeout` 是 OceanBase 数据库内部的事务超时时间，也是一个会话级变量，当一个事务执行超过`ob_trx_timeout` 还没有结束时，OBServer 也会返回一个 Error 包给客户端，错误码是 4012。

     - 如果超时发生时，事务还没有提交，则 OBServer 会回滚该事务。
     - 如果发生在提交阶段，由于事务状态未定，OBServer 不会主动回滚。

  `ob_trx_timeout` 默认为 100000000，单位是微秒，即 10 秒，可以通过以下方式设置。

      ```shell
      SET ob_trx_timeout =864000000;

      ```shell
      SET GLOBAL ob_trx_timeout =864000000;

      ```

有关以上配置项的详细信息，参见《OceanBase 数据库 参考指南》中的 **系统** **配置项** 章节。

## OBProxy 超时

影响 OBProxy 超时的参数有 `ob_query_timeout` 和 `observer_query_timeout_delta`。

- `ob_query_timeout` 表示从 OBProxy 把业务 SQL 转发给选出的 OBServer 到接收来自 OBServer 反馈的等待超时时间。

  业务的 SQL 通过 OBProxy 进行转发，如果 SQL 执行超过了业务设置的 ob_query_timeout，依然没有收到来自 OBServer 的反馈时，OBProxy 会断开与业务的连接，同时断开与 OBServer 的连接。OBProxy 确认超时的方式有 2 种：

     - 通过 session 变量 `ob_query_timeout。`
     - 根据用户在 SQL Hint 中添加的 `query_timeout`。

  如果 2 种方式同时存在，以业务的 SQL Hint 为准。
 - `observer_query_timeout_delta`：考虑到 OBProxy 与 OBServer 之间的网络 RT（Response Time，响应时间），OBProxy 内部的超时时间会在 `ob_query_timeout` 基础上加上 `observer_query_timeout_delta` 时间，默认为 20s，即 `timeout = ob_query_timeout + observer_query_timeout_delta`。

  `observer_query_timeout_delta` 可以使用 OBProxy 的 MetaDB 账户连接 OBProxy，然后使用 `ALTER PROXYCONFIG` 命令修改配置项。

  ```unknow
  obclient  -P2883 -uroot@proxysys  -A  -hXXX -pXXX
  ALTER PROXYCONFIG SET observer_query_timeout_delta=20s

  ```

  `observer_query_timeout_delta` 参数设置后立即生效，取值范围为 1~30，单位为秒。

## 应用使用 JDBC 超时

影响应用使用 JDBC 超时的参数主要有 `socketTimeout`、`connectTimeout` 与 `queryTimeout` 。

- `socketTimeout` 是 socket 的超时时间，指的是业务的 APP 与后台 OBServer 或 OBProxy 之间进行 TCP 通信的网络超时时间，如果业务 APP 超过 socketTimeout 的时间还没有从 OBServer 或 OBProxy 收到反馈，JDBC 会发生网络异常，进而关闭该连接。

  `socketTimeout` 单位是毫秒，可以通过以下方式设置。

  ```unknow
  jdbc:mysql://$ip:$port/$database?socketTimeout=60000

  ```
 - `connectTimeout` 是业务 APP 使用 JDBC 与后台 OBServer 或 OBProxy 建立 TCP 连接的超时时间，如果 TCP 连接超过这个时间没有创建成功，JDBC 会发生网络异常，进而关闭该连接。

  `connectTimeout` 的单位是毫秒，可以通过以下方式设置。

  ```unknow
  jdbc:mysql://$ip:$port/$database?socketTimeout=60000&connectTimeout=5000

  ```
 - `queryTimeout` 是业务 APP 执行 SQL 语句时，JDBC 本地的超时时间。对于超过 `queryTimeout` 仍没有执行结束的 SQL，JDBC 会在当前连接上给 OBServer 或 OBProxy 发送一个停止查询的请求，并给上层业务返回一个 `MySQLTimeoutException`。

  `queryTimeout` 单位是秒，可以通过以下方式进行设置。

  ```unknow
  int queryTimeout = 10;java.sql.Statement stmt = connection.CreateStatement();stmt.setQueryTimeout(queryTimeout)

  ```

#### 说明

一般不建议配置 `queryTimeout`。如果要使用 `queryTimeout`，建议设置一个比 `socketTimeout` 小的值，否则会先触发网络超时从而导致断开连接

Previous

[easy_reqeust hold by upper-layer for too much time 耗时问题](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000547544)

Next

[如何排查 server 断连接问题](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000568806) ![有帮助](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) 咨询热线
