---
title: 如何设置 DDL 语句的超时时间-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于如何设置 DDL 语句的超时时间相关的常见问题和使用技巧，帮助您快速解决如何设置 DDL 语句的超时时间的难题。
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

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

划线反馈

# 如何设置 DDL 语句的超时时间

更新时间：2026-05-21 09:16

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

在 OceanBase 数据库 V4.0 之前，RootService（RS）处理 DDL是串行化的，并发执行的 DDL 任务会在 RS 的队列里面进行排队等待。在 DDL 并发量比较大的情况下，有可能出现 DDL 任务在 RS 队列中等待较长时间，从而导致最终执行失败，返回用户超时。

SELECT 等 DML 语句的超时时间由变量 `ob_query_timeout` 控制，其并发的 worker 线程数与租户的 unit 规格有关。DDL 语句是在 RS 中串行执行，其超时时间由参数 `_ob_ddl_timeout` 控制，影响范围是集群级别，默认值 1000s，修改完成后动态生效。1000 秒的时间已经足够长，一般不需要进行调整。如果执行的 DDL 超时了，大多都是因为用户并发执行了一大批 DDL，大部分类型的 DDL 在 OceanBase 里暂时都还是串行处理的，所以排队时间可能会超过这个 `_ob_ddl_timeout`。还有一种情况就是用户执行的 DDL 真的非常复杂，1000 秒就是处理不完。但是对于一些会受表中数据量影响的 DDL，例如创建索引、创建外键约束、创建 check 约束等，不会受 `_ob_ddl_timeout` 超时时间的控制。这类特殊 DDL 的超时时间是 102 年，可以简单理解成不会超时。 有一个要特别注意的点：查询建表 `create table as` 目前还是受 `_ob_ddl_timeout` 的控制的，默认是 1000 秒。 `CTAS` 也和数据量相关，超时时间默认只有 1000 秒可能不太合理。

查看与调整超时参数 `_ob_ddl_timeout` 值，示例如下。

1. 在 SYS 租户下通过内部表 `_all_virtual_tenant_parameter_stat` 查看系统隐藏变量配置项信息。

   ```shell
   obclient > select * from oceanbase.__all_virtual_tenant_parameter_stat where name like '_ob_ddl_timeout';

   ```

   ​输出结果如下。

   ```shell
   +-------+----------+---------------+----------+-----------------+-----------+-------+------------------------------------------------------+----------+---------+---------+-------------------+
   | zone  | svr_type | svr_ip        | svr_port | name            | data_type | value | info                                                 | section  | scope   | source  | edit_level        |
   +-------+----------+---------------+----------+-----------------+-----------+-------+------------------------------------------------------+----------+---------+---------+-------------------+
   | zone1 | observer | xx.xx.xx.xx   |     xxxx | _ob_ddl_timeout | NULL      | 1000s | the config parameter of ddl timeoutRange: [1s, +∞)   | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE |
   +-------+----------+---------------+----------+-----------------+-----------+-------+------------------------------------------------------+----------+---------+---------+-------------------+
   1 row in set (0.009 sec)

   ```
 2. 在 SYS 租户下通过内部表 `__all_sys_parameter` 查看当前参数 `_ob_ddl_timeout` 值。

   ```shell
   obclient > select name, data_type, value from oceanbase.__all_sys_parameter where name = '_ob_ddl_timeout';
   Empty set (0.039 sec)

   ```

   上述没有查到相关信息，说明集群里从来没有修改过这个 `_ob_ddl_timeout` 的默认值。
 3. 在 SYS 租户下修改超时时间参数 `_ob_ddl_timeout` 值为 1234 秒。

   ```shell
   obclient > alter system set _ob_ddl_timeout = '1234s';
   Query OK, 0 rows affected (0.046 sec)

   ```
 4. 在 SYS 租户下通过内部表 `__all_sys_parameter` 查看当前参数 `_ob_ddl_timeout` 值。

   ```shell
   obclient > select name,data_type,value from oceanbase.__all_sys_parameter where name = '_ob_ddl_timeout';

   ```

   调整超时时间参数 `_ob_ddl_timeout` 为非默认值后，则可查询到相关信息，输出结果如下：

   ```shell
   +-----------------+-----------+-------+
   | name            | data_type | value |
   +-----------------+-----------+-------+
   | _ob_ddl_timeout | varchar   | 1234s |
   +-----------------+-----------+-------+
   1 row in set (0.002 sec)

   ```
 5. 在 SYS 租户下修改超时时间参数 `_ob_ddl_timeout` 值为 1 小时。

   ```shell
   obclient > alter system set _ob_ddl_timeout = '1h';
   Query OK, 0 rows affected (0.035 sec)

   ```
 6. 在 SYS 租户下通过内部表 `__all_sys_parameter` 查看当前参数 `_ob_ddl_timeout` 值。

   ```

   ```shell
   +-----------------+-----------+-------+
   | name            | data_type | value |
   +-----------------+-----------+-------+
   | _ob_ddl_timeout | varchar   | 1h    |
   +-----------------+-----------+-------+
   1 row in set (0.007 sec)

   ```
 7. 在 SYS 租户下修改超时时间参数 `_ob_ddl_timeout` 值为 1d 。

   ```shell
   obclient > alter system set _ob_ddl_timeout = '1d';
   Query OK, 0 rows affected (0.019 sec)

   ```
 8. 在 SYS 租户下通过内部表 `__all_sys_parameter` 查看当前参数 `_ob_ddl_timeout` 值。

   ```

   ```shell
   +-----------------+-----------+-------+
   | name            | data_type | value |
   +-----------------+-----------+-------+
   | _ob_ddl_timeout | varchar   | 1d    |
   +-----------------+-----------+-------+
   1 row in set (0.002 sec)

   ```
 9. 在 SYS 租户下修改超时时间参数 `_ob_ddl_timeout` 值为 1 分钟。

   ```shell
   obclient > alter system set _ob_ddl_timeout = '1m';
   Query OK, 0 rows affected (0.019 sec)

   ```
 10. 在 SYS 租户下通过内部表 `__all_sys_parameter` 查看当前参数 `_ob_ddl_timeout` 值。

    ```

    ```shell
    +-----------------+-----------+-------+
    | name            | data_type | value |
    +-----------------+-----------+-------+
    | _ob_ddl_timeout | varchar   | 1m    |
    +-----------------+-----------+-------+
    1 row in set (0.001 sec)

    ```

## 适用版本

OceanBase 数据库 V2.x、V3.x、V4.x 版本。

上一篇

[Offline DDL 列表及执行前注意事项](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000262234)

下一篇

[DDL 索引问题排查](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000002571790) ![有帮助](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) 咨询热线
