首批通过分布式安全可靠测评,为关键业务系统打造
OceanBase 数据库创建全局索引任务超时
更新时间:2026-05-22 08:56
问题描述
OceanBase 数据库 V3.x 部分版本创建全局索引超时,本文讲述如何应对这种超时场景。
适用版本
OceanBase 数据库 V3.x 版本。
问题原因
OceanBase 数据库 V3.x 部分版本全局索引采样是不优的,有数据倾斜问题。在 Table Scan 过程中,不同 Task 实际分配到行数差异较大,导致创建索引超时。
解决方法
估算主表数据量。
按测试经验,使用 100 个并发创建行数 18 亿表的索引,用了 17 分钟。表有 150 亿行,数据倾斜后,估算使用单线程创建,时间大约是 150/18 * 17min * 100 = 14166min / 60=236 小时,约为 9 天。实际索引创建的时间是按照 10 天这个量级的,跟表结构以及索引结构不同,这个时间可能会有浮动。
修改如下配置参数。
关于
global_index_build_single_replica_timeout的详细信息,参见 global_index_build_single_replica_timeout。此配置参数默认为48h,这里修改为 10 天。
obclient > ALTER SYSTEM SET global_index_build_single_replica_timeout='10d';
执行如下 SQL 语句来检测索引创建进度。
查询查询索引创建任务是否存在。
obclient > select * from oceanbase.__all_virtual_sys_task_status;查询表情况。
obclient > select * from oceanbase.__all_virtual_table where data_table_id in (select table_id from oceanbase.__all_virtual_table where table_name='cntr_sub_state_slbps');