---
title: "手动触发合并 - OceanBase 数据库 V4.6.0 | OceanBase 文档中心"
description: 手动触发合并 合并也可以通过手动触发来完成。手动合并包括租户级合并、表级合并和分区级合并。 自适应合并实际调度的就是分区级合并，只是由系统适时地对有需求的分区发起分区合并任务。同时，分区级合并的使用场景与自适应合并解决的场景相同，即主要针对导数、频繁 DML、查询效率低等场景，有关自适应合并的详细介绍，请参见 自适应…
---
切换语言

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

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.6.0

# 手动触发合并

更新时间：2026-06-17 08:53:22

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.6.0/zh-CN/700.reference/200.system-management/500.manage-data-storage/200.merge-management/400.manually-trigger-a-merge.md)  

合并也可以通过手动触发来完成。手动合并包括租户级合并、表级合并和分区级合并。

自适应合并实际调度的就是分区级合并，只是由系统适时地对有需求的分区发起分区合并任务。同时，分区级合并的使用场景与自适应合并解决的场景相同，即主要针对导数、频繁 DML、查询效率低等场景，有关自适应合并的详细介绍，请参见 [自适应合并](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005684836)。如果您因业务需要关闭了自适应合并功能，遇到查询慢等问题，您可以使用手动方式发起分区级合并来解决这些问题。

## 使用限制及注意事项

分区与 Tablet 一一对应，在进行分区级合并时，需要注意以下事项：

- 当对应的分区正在执行租户级合并任务时，无法发起分区级合并。
 - 当对应的分区正在执行自适应调度的合并任务时，无法发起分区级合并。
 - 当对应分区的多副本处于不一致状态时，无法发起分区级合并。
 - 当对应分区处于恢复中或 Transfer 状态时，无法发起分区级合并。
 - 当合并任务被暂停时，不允许发起分区级合并。
 - 分区级合并的实质为对同一分区的多个副本执行 Major Compaction 任务，会消耗 CPU 及磁盘 I/O。在执行分区级合并操作前，您需要权衡当前租户的资源占用情况，并且当分区级合并命令执行成功后，会出现 CPU、I/O 占用升高的情况。

表级合并是指对某个租户下的某个表的所有分区发起分区合并命令。表级合并有以下使用限制：

- 仅支持对数据存储在数据库内部的用户表发起表级合并。
 - 与分区级合并一样，表级合并为异步任务，不保证一定能发起成功。

## 前提条件

触发合并前，需要确保全局合并开关已开启，全局合并开关由集群级配置项 `enable_major_freeze` 控制，默认值为 `True`，表示开启合并开关。

如果当前集群未开启全局合并开关，请参考以下操作开启全局合并开关。

1. 使用 `root` 用户登录集群的 `sys` 租户。
 2. 确认全局合并开关是否已开启。

   ```sql
   obclient> SHOW PARAMETERS LIKE 'enable_major_freeze';

   ```
 3. 如果显示未开启，执行以下语句，开启合并开关。

   ```sql
   obclient> ALTER SYSTEM SET enable_major_freeze='True';

   ```

   关于配置项 `enable_major_freeze` 的更多信息，请参见 [enable_major_freeze](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005685471)。

## 系统租户手动发起合并

系统租户可以对本租户、所有租户或指定租户发起合并操作。

具体操作如下：

1. 使用 `root` 用户登录集群的 `sys` 租户。
 2. 执行以下命令，发起合并。

      - 发起租户级别的合并

       SQL 语句如下：

       ```sql
       ALTER SYSTEM MAJOR FREEZE TENANT [=] all_user | all | all_meta | tenant_name [, tenant_name ...];

       ```

       其中，`[=]` 表示等号（=）为可选。

       示例如下：

            - 系统租户对本租户发起合并

             ```sql
             obclient> ALTER SYSTEM MAJOR FREEZE;

             ```
            - 系统租户对所有用户租户发起合并

             ```sql
             obclient> ALTER SYSTEM MAJOR FREEZE TENANT = all_user;

             ```

             或者

             ```sql
             obclient> ALTER SYSTEM MAJOR FREEZE TENANT = all;

             ```

             #### 说明

             OceanBase 数据库从 V4.2.1 版本开始，`TENANT = all_user` 与 `TENANT = all`语义相同，在需要生效范围为所有用户租户时，推荐使用 `TENANT = all_user`，后续 `TENANT = all` 将废弃不再使用。
            - 系统租户对所有 Meta 租户发起合并

             ```sql
             obclient> ALTER SYSTEM MAJOR FREEZE TENANT = all_meta;

             ```
            - 系统租户对指定租户发起合并

             ```sql
             obclient> ALTER SYSTEM MAJOR FREEZE TENANT = tenant1,tenant2;

             ```
      - 发起表级合并

       系统租户对指定租户发起表级合并的 SQL 语句如下：

       ```sql
       ALTER SYSTEM MAJOR FREEZE TENANT [=] tenant_name TABLE_ID = table_id;

       ```

       其中，`table_id` 为表 ID，可以由系统租户通过查询视图 `CDB_OB_TABLE_LOCATIONS` 来获取。有关视图 `CDB_OB_TABLE_LOCATIONS` 中各字段的详细介绍，请参见 [oceanbase.CDB_OB_TABLE_LOCATIONS](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005684145)。

       系统租户对租户 `tenant1` 发起表级合并的示例如下：

            1. 系统租户获取待合并的表 t1 的 `table_id`。

              ```shell
              obclient(root@sys)[oceanbase]> SELECT a.tenant_id, b.tenant_name, a.database_name, a.table_id, a.table_name FROM oceanbase.CDB_OB_TABLE_LOCATIONS a, oceanbase.DBA_OB_TENANTS b
              WHERE a.tenant_id=b.tenant_id
              AND a.table_name = 't1'
              AND b.tenant_name = 'tenant1';

              ```

              查询结果如下：

              ```shell
              +-----------+-------------+---------------+----------+------------+
              | tenant_id | tenant_name | database_name | table_id | table_name |
              +-----------+-------------+---------------+----------+------------+
              |      1002 | tenant1     | test          |   500002 | t1         |
              +-----------+-------------+---------------+----------+------------+
              1 row in set

              ```
            2. 执行以下命令，发起表级合并。

              ```shell
              obclient(root@sys)[oceanbase]> ALTER SYSTEM MAJOR FREEZE TENANT = tenant1 TABLE_ID = 500002;

              ```
      - 发起分区级的合并

       系统租户对指定租户发起分区级的合并的 SQL 语句如下：

       ```sql
       ALTER SYSTEM MAJOR FREEZE TENANT [=] tenant_name TABLET_ID = tablet_id;

       ```

       其中，`tablet_id` 可以由系统租户通过查询视图 `CDB_OB_TABLE_LOCATIONS` 来获取。有关视图 `CDB_OB_TABLE_LOCATIONS` 中各字段的详细介绍，请参见 [oceanbase.CDB_OB_TABLE_LOCATIONS](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005684145)。

       系统租户对租户 `tenant1` 发起分区级合并的示例如下：

            1. 系统租户获取待合并的表 t1 的分区对应的 `tablet_id`。

              ```shell
              obclient(root@sys)[oceanbase]> SELECT a.tenant_id, b.tenant_name, a.database_name, a.table_id, a.table_name, a.tablet_id, a.partition_name, a.subpartition_name FROM oceanbase.CDB_OB_TABLE_LOCATIONS a, oceanbase.DBA_OB_TENANTS b
              WHERE a.tenant_id=b.tenant_id
              AND a.table_name = 't1'
              AND b.tenant_name = 'tenant1';

              ```

              查询结果如下：

              ```shell
              +-----------+-------------+---------------+----------+------------+-----------+----------------+-------------------+
              | tenant_id | tenant_name | database_name | table_id | table_name | tablet_id | partition_name | subpartition_name |
              +-----------+-------------+---------------+----------+------------+-----------+----------------+-------------------+
              |      1002 | tenant1     | test          |   500010 | t1         |    200007 | p0             | NULL              |
              |      1002 | tenant1     | test          |   500010 | t1         |    200008 | p1             | NULL              |
              |      1002 | tenant1     | test          |   500010 | t1         |    200009 | p2             | NULL              |
              +-----------+-------------+---------------+----------+------------+-----------+----------------+-------------------+
              3 rows in set

              ```
            2. 执行以下命令，发起分区级合并。

              ```shell
              obclient(root@sys)[oceanbase]> ALTER SYSTEM MAJOR FREEZE TENANT = tenant1 TABLET_ID = 200007;

              ```  

       #### 注意

       分区级合并命令与租户级合并以及自适应调度策略发起的合并均存在互斥关系，命令执行成功并不代表分区合并发起成功。您可以根据视图 `GV$OB_MERGE_INFO` 查看指定分区中 `ACTION='MEDIUM_MERGE'` 的合并信息，或者根据视图 `GV$OB_TABLET_COMPACTION_HISTORY` 查看指定分区中 `TYPE='MEDIUM_MERGE'` 的合并信息来确认合并是否成功发起。有关查看合并信息的详细操作，请参见 [查看合并信息](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005684833)。

## 用户租户手动发起合并

用户租户只能对本租户发起租户级别和分区级别的合并操作。

1. 用户租户的租户管理员登录到数据库。
 2. 对本租户发起租户级合并。

      - 发起本租户的合并

       用户租户对指定表发起合并的 SQL 语句如下：

       ```sql
       ALTER SYSTEM MAJOR FREEZE TABLE_ID = table_id;

       ```

       其中，`table_id` 表示表 ID，可以通过查询视图 `DBA_OB_TABLE_LOCATIONS` 来获取。有关视图 `DBA_OB_TABLE_LOCATIONS` 中各字段的详细介绍，参见 [DBA_OB_TABLE_LOCATIONS](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005684667)。

       用户租户对指定表发起合并的示例如下：

            1. 获取待合并的表 t1 的 `table_id`。

                  MySQL 模式   Oracle 模式

              MySQL 模式下的查询语句如下：

              ```shell
              obclient(root@tenant1)[oceanbase]> SELECT database_name, table_id, table_name FROM oceanbase.DBA_OB_TABLE_LOCATIONS WHERE table_name = 't1';

              ```

              查询结果如下：

              ```shell
              +---------------+----------+------------+
              | database_name | table_id | table_name |
              +---------------+----------+------------+
              | test          |   500002 | t1         |
              +---------------+----------+------------+
              1 row in set

              ```

              Oracle 模式下的查询语句如下：

              ```shell
              obclient(sys@tenant1)[SYS]> SELECT database_name, table_id, table_name FROM SYS.DBA_OB_TABLE_LOCATIONS WHERE table_name = 'T1';

              ```

              查询结果如下：

              ```shell
              +---------------+----------+------------+
              | DATABASE_NAME | TABLE_ID | TABLE_NAME |
              +---------------+----------+------------+
              | SYS           |   500002 | T1         |
              +---------------+----------+------------+
              1 row in set

              ```shell
              obclient> ALTER SYSTEM MAJOR FREEZE TABLE_ID = 500002;

              ```
      - 发起分区级别的合并

       用户租户对指定分区发起合并的语句如下：

       ```sql
       ALTER SYSTEM MAJOR FREEZE TABLET_ID = tablet_id;

       ```

       其中，`tablet_id` 可以通过查询视图 `DBA_OB_TABLE_LOCATIONS` 来获取。有关视图 `DBA_OB_TABLE_LOCATIONS` 中各字段的详细介绍，参见 [DBA_OB_TABLE_LOCATIONS](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005684667)。

       用户租户对指定分区发起合并的示例如下：

            1. 获取待合并的表 t1 的分区对应的 `tablet_id`。

              ```shell
              obclient(root@tenant1)[oceanbase]> SELECT database_name, table_id, table_name, tablet_id, partition_name, subpartition_name FROM oceanbase.DBA_OB_TABLE_LOCATIONS WHERE table_name = 't1';

              ```

              查询结果如下：

              ```shell
              +---------------+----------+------------+-----------+----------------+-------------------+
              | database_name | table_id | table_name | tablet_id | partition_name | subpartition_name |
              +---------------+----------+------------+-----------+----------------+-------------------+
              | test          |   500010 | t1         |    200007 | p0             | NULL              |
              | test          |   500010 | t1         |    200008 | p1             | NULL              |
              | test          |   500010 | t1         |    200009 | p2             | NULL              |
              +---------------+----------+------------+-----------+----------------+-------------------+
              3 rows in set

              ```

              ```shell
              obclient(sys@tenant1)[SYS]> SELECT database_name, table_id, table_name, tablet_id, partition_name, subpartition_name FROM SYS.DBA_OB_TABLE_LOCATIONS WHERE table_name = 'T1';

              ```

              查询结果如下：

              ```shell
              +---------------+----------+------------+-----------+----------------+-------------------+
              | DATABASE_NAME | TABLE_ID | TABLE_NAME | TABLET_ID | PARTITION_NAME | SUBPARTITION_NAME |
              +---------------+----------+------------+-----------+----------------+-------------------+
              | SYS           |   500010 | T1         |    200007 | P0             | NULL              |
              | SYS           |   500010 | T1         |    200008 | P1             | NULL              |
              | SYS           |   500010 | T1         |    200009 | P2             | NULL              |
              +---------------+----------+------------+-----------+----------------+-------------------+
              3 rows in set

              ```
            2. 执行以下命令，发起指定分区的合并。

              ```shell
              obclient> ALTER SYSTEM MAJOR FREEZE TABLET_ID = 200007;

              ```  

       #### 注意

       分区级合并命令与租户级合并以及自适应调度策略发起的合并均存在互斥关系，命令执行成功并不代表分区合并发起成功。用户租户可以根据视图 `GV$OB_TABLET_COMPACTION_HISTORY` 查看指定分区中 `TYPE='MEDIUM_MERGE'` 的合并信息来确认合并是否成功发起。有关查看合并信息的详细操作，请参见 [查看合并信息](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005684833)。

## 相关文档

- [自动触发合并](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005684830)
 - [定时触发每日租户合并](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005684837)
 - [自适应合并](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005684836)
 - [手动控制合并](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005684832)
 - [查看合并信息](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005684833)

 上一篇 下一篇 ![有帮助](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) 咨询热线
