基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
如何设置 DDL 语句的超时时间
更新时间:2026-05-21 09:16
在 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 值,示例如下。
在 SYS 租户下通过内部表
_all_virtual_tenant_parameter_stat查看系统隐藏变量配置项信息。obclient > select * from oceanbase.__all_virtual_tenant_parameter_stat where name like '_ob_ddl_timeout';输出结果如下。
+-------+----------+---------------+----------+-----------------+-----------+-------+------------------------------------------------------+----------+---------+---------+-------------------+ | 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)在 SYS 租户下通过内部表
__all_sys_parameter查看当前参数_ob_ddl_timeout值。obclient > select name, data_type, value from oceanbase.__all_sys_parameter where name = '_ob_ddl_timeout'; Empty set (0.039 sec)上述没有查到相关信息,说明集群里从来没有修改过这个
_ob_ddl_timeout的默认值。在 SYS 租户下修改超时时间参数
_ob_ddl_timeout值为 1234 秒。obclient > alter system set _ob_ddl_timeout = '1234s'; Query OK, 0 rows affected (0.046 sec)在 SYS 租户下通过内部表
__all_sys_parameter查看当前参数_ob_ddl_timeout值。obclient > select name,data_type,value from oceanbase.__all_sys_parameter where name = '_ob_ddl_timeout';调整超时时间参数
_ob_ddl_timeout为非默认值后,则可查询到相关信息,输出结果如下:+-----------------+-----------+-------+ | name | data_type | value | +-----------------+-----------+-------+ | _ob_ddl_timeout | varchar | 1234s | +-----------------+-----------+-------+ 1 row in set (0.002 sec)在 SYS 租户下修改超时时间参数
_ob_ddl_timeout值为 1 小时。obclient > alter system set _ob_ddl_timeout = '1h'; Query OK, 0 rows affected (0.035 sec)在 SYS 租户下通过内部表
__all_sys_parameter查看当前参数_ob_ddl_timeout值。obclient > select name,data_type,value from oceanbase.__all_sys_parameter where name = '_ob_ddl_timeout';调整超时时间参数
_ob_ddl_timeout为非默认值后,则可查询到相关信息,输出结果如下:+-----------------+-----------+-------+ | name | data_type | value | +-----------------+-----------+-------+ | _ob_ddl_timeout | varchar | 1h | +-----------------+-----------+-------+ 1 row in set (0.007 sec)在 SYS 租户下修改超时时间参数
_ob_ddl_timeout值为 1d 。obclient > alter system set _ob_ddl_timeout = '1d'; Query OK, 0 rows affected (0.019 sec)在 SYS 租户下通过内部表
__all_sys_parameter查看当前参数_ob_ddl_timeout值。obclient > select name,data_type,value from oceanbase.__all_sys_parameter where name = '_ob_ddl_timeout';调整超时时间参数
_ob_ddl_timeout为非默认值后,则可查询到相关信息,输出结果如下:+-----------------+-----------+-------+ | name | data_type | value | +-----------------+-----------+-------+ | _ob_ddl_timeout | varchar | 1d | +-----------------+-----------+-------+ 1 row in set (0.002 sec)在 SYS 租户下修改超时时间参数
_ob_ddl_timeout值为 1 分钟。obclient > alter system set _ob_ddl_timeout = '1m'; Query OK, 0 rows affected (0.019 sec)在 SYS 租户下通过内部表
__all_sys_parameter查看当前参数_ob_ddl_timeout值。obclient > select name,data_type,value from oceanbase.__all_sys_parameter where name = '_ob_ddl_timeout';调整超时时间参数
_ob_ddl_timeout为非默认值后,则可查询到相关信息,输出结果如下:+-----------------+-----------+-------+ | name | data_type | value | +-----------------+-----------+-------+ | _ob_ddl_timeout | varchar | 1m | +-----------------+-----------+-------+ 1 row in set (0.001 sec)
适用版本
OceanBase 数据库 V2.x、V3.x、V4.x 版本。