基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
说明
OceanBase 4.x 版本起,TRUNCATE TABLE 支持并行执行,显著提升批量清表效率。3.x 及更早版本建议采用并发 DELETE 并分批提交。
更新时间:2026-07-28
在 OceanBase 数据库中,批量清理大量小表数据是常见的运维场景。不同版本的 OceanBase 对 TRUNCATE TABLE 并行能力的支持存在差异,这直接影响了批量清表的效率和最佳实践选择。
TRUNCATE TABLE 操作在租户内为串行执行,批量清理大量小表时可能成为性能瓶颈。此时,采用并发 DELETE 并分批提交,通常能获得更优的清理效率。TRUNCATE TABLE 已支持并行执行,批量清表效率大幅提升,推荐优先采用并行 TRUNCATE TABLE。本文将结合实际测试示例,分析不同方案在特定环境下的表现,并给出针对不同版本的最佳实践建议。请注意,文中测试结果仅供参考,实际效果需结合您的业务环境和系统配置进行评估。
OceanBase 4.x 版本起,TRUNCATE TABLE 支持并行执行,显著提升批量清表效率。3.x 及更早版本建议采用并发 DELETE 并分批提交。
TRUNCATE TABLE 操作在租户内不能并行执行TRUNCATE TABLE 操作会造成 DDL 资源争用只有支持并行的 DDL 执行过程中才能并行。如果您插入了串行 DDL,则整体 DDL 执行将转为串行。因此,在 TRUNCATE TABLE 执行过程中最好仅包含支持并行的 DDL。如果有其他 DDL,您需要查看是否支持并行。
批处理设计
DELETE 语句-- 创建表存储需要处理的表名
CREATE TABLE tables_to_clean (table_name VARCHAR(100));
INSERT INTO tables_to_clean VALUES ('fund_daily_position'), ('fund_transaction'), ...;
-- 动态生成并执行 DELETE 语句
BEGIN
FOR r IN (SELECT table_name FROM tables_to_clean) LOOP
EXECUTE IMMEDIATE 'DELETE FROM ' || r.table_name;
END LOOP;
END;
并行度调整
-- 设置会话级别并行度
SET ob_sql_work_area_percentage = 30; -- 增加工作区内存
SET parallel_servers_target = 16; -- 设置并行度
会话并行
DELETE 操作事务管理
-- 分批提交,避免单个大事务
BEGIN
FOR i IN 1..10 LOOP
-- 每批处理部分表
DELETE FROM table_group_1;
DELETE FROM table_group_2;
COMMIT; -- 阶段性提交
END LOOP;
END;
cpu_quota_concurrency 值为 4。| 清表方式 | 表数量 | 总行数 | 耗时(秒) | TPS |
|---|---|---|---|---|
| TRUNCATE TABLE(串行) | 100 | 100,000 | 8.00 | 12,500 |
| TRUNCATE TABLE(并行,并发度为 10) | 100 | 100,000 | 1.1 | 90,909 |
| DELETE(带分批提交) | 100 | 100,000 | 2.00 | 50,000 |
从上表可以看出:
您在真实环境中的性能表现会因以下因素而有显著差异:
您可以使用以下方式监控性能指标:
-- 监控执行情况
SELECT * FROM gv$session_longops WHERE opname LIKE '%DELETE%';
-- 监控资源使用
SELECT * FROM gv$sysstat WHERE name LIKE '%parallel%';
在您实施任何优化方案前,建议在与生产环境相似的测试环境中进行实际测试,以获取准确的性能数据。
以上测试结果仅为特定环境下的示例,实际效果需结合您的业务环境和系统配置进行评估。
在 OceanBase 数据库环境下处理批量小表数据清理时,使用并行 TRUNCATE TABLE 策略在 V4.X 版本下可以显著提升系统性能和资源利用率。在 V3.X 版本中,建议使用带分批提交的 DELETE 方法。通过合理设计批处理逻辑和并行度,可以缩短批量清表操作的时间窗口,为业务处理提供更充裕的时间保障。具体建议如下:
TRUNCATE TABLEDELETE此最佳实践特别适用于表数量多但单表数据量小的业务场景,可有效解决 OceanBase 数据库中 TRUNCATE TABLE 操作不能并行的局限性。