---
title: 重整数据 DDL 的执行速度优化-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于重整数据 DDL 的执行速度优化相关的常见问题和使用技巧，帮助您快速解决重整数据 DDL 的执行速度优化的难题。
---
切换语言

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

划线反馈

# 重整数据 DDL 的执行速度优化

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

适用版本： V4.0.x、V4.1.x、V4.2.x 内容类型：How-to  

OceanBase 数据库 V4.x.x 版本所支持的重整数据相关 DDL 包括如下：

- 索引构建
 - 主键操作
 - 修改列类型
 - 修改字符集
 - 修改分区规则
 - 删除列
 - 中间添加列
 - 修改列顺序

## 适用版本

OceanBase 数据库 V4.x.x

## 优化方法

OceanBase 数据库支持如下方式来加快重整数据 DDL 的执行速度。

#### 注意

本文所涉及的参数调整会导致 DDL 占用大量的资源，适用于最大化 DDL 执行速度的场景，不适用于有业务流量的场景。

- 设置并行度

  对于 OceanBase 数据库 V4.x 及之后的版本，DDL 默认是串行执行的，可以通过 `SESSION` 级别的变量来控制并行度，但是所有 DDL 的并行度加起来不超过租户的 `max_cpu` 上限。

  需要注意的是，针对 OceanBase 数据库 V4.1.0 BP3 之前的版本，由于临时文件实现上的限制，建议所有 DDL 的并行度加起来不超过 64。

  并行度的设置方法如下：

     - MySQL 模式示例：`SET SESSION _force_parallel_ddl_dop = 8;`
     - Oracle 模式示例：`ALTER SESSION FORCE PARALLEL DDL PARALLEL 8;`

  一般在调整并行度之后，也需要调整相应的 `parallel_servers_target` 值，该值比所有并行度之和大即可。如果并行度为 80，则可设置 `parallel_servers_target` 的值为 100，示例如下：

  ```sql
  SET GLOBAL parallel_servers_target = 100; //设置每个 OBServer 节点上的并行查询排队条件

  ```

  删除列操作是借助 DAG 来调度完成的，因此在调整上述设置并行度参数的同时需要调整 DAG 的并行度，语法为：`ALTER SYSTEM SET ddl_thread_score = INT_VALUE TENANT = 'tenant_name';`（OceanBase 数据库 V4.1.0 BP3 和 V4.2.1 及之后版本开始支持该参数）。

  在设置参数 `ddl_thread_score` 之前查看默认值，命令如下：

  ```shell
  MySQL [oceanbase]> show parameters like '%ddl_thread_score%';

  ```

  输出结果如下：

  ```shell
  +-------+----------+--------------+----------+------------------+-----------+-------+-----------------------------------------------------------------------------------------------------------+----------+--------+---------+-------------------+
  | zone  | svr_type | svr_ip       | svr_port | name             | data_type | value | info                                                                                                      | section  | scope  | source  | edit_level        |
  +-------+----------+--------------+----------+------------------+-----------+-------+-----------------------------------------------------------------------------------------------------------+----------+--------+---------+-------------------+
  | zone1 | observer | xx.xxx.x.xxx |    44000 | ddl_thread_score | INT       | 0     | the current work thread score of ddl thread. Range: [0,100] in integer. Especially, 0 means default value | OBSERVER | TENANT | DEFAULT | DYNAMIC_EFFECTIVE |
  | zone2 | observer | xx.xxx.x.xxx |    44002 | ddl_thread_score | INT       | 0     | the current work thread score of ddl thread. Range: [0,100] in integer. Especially, 0 means default value | OBSERVER | TENANT | DEFAULT | DYNAMIC_EFFECTIVE |
  +-------+----------+--------------+----------+------------------+-----------+-------+-----------------------------------------------------------------------------------------------------------+----------+--------+---------+-------------------+
  2 rows in set (0.01 sec)

  ```

  可知参数 `ddl_thread_score` 配置项默认为 0，表示使用内部默认值 2 作为并行度。

  参数 `ddl_thread_score` 的说明：

     - 参数 `ddl_thread_score` 描述的是删除列执行的并行度，注意此处的 `score` 理解为一个并行度。当机器可支持核数一定场景下，是有可能会挤压到其他模块的（如合并速度等），一般设置为 8 可满足大部分的要求。
     - 参数 `ddl_thread_score` 只影响删列执行并行度，同时参数 `ddl_thread_score` 也是租户级别的，不恢复原设置的话，修改之后租户下的删除列操作都将以此作为执行的并行度，如设置为 8 则后续删列继续以 8 并行度执行。

           - 恢复参数 `ddl_thread_score` 的默认值。

            ```shell
            ALTER SYSTEM SET ddl_thread_score = 0 TENANT = 'tenant_name';

            ```
 - 关闭 IO 和网络限流

     - 关闭 IO 限流的语法示例如下，示例中为建议值。

      ```shell
      ALTER RESOURCE UNIT unit_name max_iops=100000000, min_iops=100000000;

      ```

      需要注意的是，OceanBase 数据库 V4.1.0 BP3 和 V4.2.1 及之后版本开始默认不限制 IOPS，即无需设置 IOPS 值。
     - 关闭网络限流的语法示例如下，示例中为建议值。

      ```shell
      ALTER SYSTEM SET sys_bkgd_net_percentage = 100; //设置后台系统任务可占用网络带宽百分比

      ```
 - 调大 IO 线程数

  调大 IO 线程数的语法示例如下，示例中为建议值。

  ```shell
   ALTER SYSTEM SET _io_callback_thread_count = 32 TENANT = 'tenant_name'; //设置数据解压的 IO 线程
   ALTER SYSTEM SET disk_io_thread_count = 32 TENANT='tenant_name';    //设置磁盘 IO 线程数（必须为偶数）

  ```
 - 调大排序可用内存上限

  调大排序可用内存上限的语法示例如下，一般调整到 80 即可。

  ```shell
  SET GLOBAL ob_sql_work_area_percentage = 80; //设置 SQL 执行的租户内存百分比限制

  ```
 - 调大临时文件的缓存上限

  调大临时文件的缓存上限的语法示例如下，建议调整到 10% 即可。

  ```shell
  ALTER SYSTEM SET _temporary_file_io_area_size = '10' TENANT = 'tenant_name';

  ```

通过上述方式调整参数后，观察 DDL 执行的机器上的 CPU 和 IO 资源利用率是否接近配置的并发度，以及所占用的资源是否符合预期。

上一篇

[DDL 索引问题排查](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000002571790)

下一篇

[OceanBase 数据库中 TRUNCATE 语句注意事项](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000000095) ![有帮助](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) 咨询热线
