---
title: "自适应合并 - OceanBase 数据库 V4.5.0 | OceanBase 文档中心"
description: 自适应合并 OceanBase 数据库从 V4.1.0 版本开始支持自适应合并。开启自适应合并后，系统会实时采集并统计用户的查询、写入等信息，再根据这些信息来识别可能导致的查询慢的场景，自适应地调度合并任务，达到对用户无感知地解决相关场景可能导致的慢查询问题。自适应合并开启期间，系统以分区为维度进行统计信息的采集及合…
---
切换语言

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

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

# 自适应合并

更新时间：2026-02-25 15:49:30

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.0/zh-CN/700.reference/200.system-management/500.manage-data-storage/200.merge-management/320.adaptive-compaction.md)  

OceanBase 数据库从 V4.1.0 版本开始支持自适应合并。开启自适应合并后，系统会实时采集并统计用户的查询、写入等信息，再根据这些信息来识别可能导致的查询慢的场景，自适应地调度合并任务，达到对用户无感知地解决相关场景可能导致的慢查询问题。自适应合并开启期间，系统以分区为维度进行统计信息的采集及合并任务的调度。

使用自适应合并功能，可以解决如下问题：

- 避免一部分 Buffer 表问题的出现。
 - 优化导数场景下的查询性能。
 - 识别并规避一部分慢查询场景。

## 触发规则

当分区 Leader 满足一定条件时，系统就会自动为该分区及 Follower 副本调度自适应合并。自适应合并的触发规则如下：

- 系统通过分析一段时间内分区的统计信息，获取到该分区查询和转储的次数以及增量数据中 Insert 行数的占比，确认该场景是否为导数场景。如果是导数场景，则对该分区触发自适应合并。
 - 系统通过分析一段时间内分区的统计信息，获取到该分区转储的次数以及增量数据中更新和删除行的占比，确认该场景是否为导数场景。如果是导数场景，则对该分区触发自适应合并。
 - 系统通过统计分区增量数据的总行数，确认该场景是否为持续写入场景，如果是持续写入场景，系统对该分区触发自适应合并。
 - 系统通过查询扫描的数据量与实际有效数据的比例，确认针对该分区的查询是否为慢查询，如果为慢查询，系统对该分区触发自适应合并。

## 注意事项

- 自适应合并可以有效减少一部分查询慢的问题，如果您的业务对查询性能要求比较高，并且存在自适应合并所支持的场景时，建议不要关闭自适应合并功能。
 - 在 OceanBase 数据库中，名称以 "_" 开头的配置项均为隐藏配置项，仅供开发人员在故障排查或紧急运维时使用。如果确认需要关闭自适应合并功能，请联系技术支持人员协助处理。

## 步骤一：开启自适应合并

自适应合并功能由租户级隐藏配置项 `_enable_adaptive_compaction` 进行控制，默认为开启状态。

1. 使用 `root` 用户登录集群的 `sys` 租户。
 2. 查询租户级隐藏配置项 `_enable_adaptive_compaction` 的值。

   ```shell
   obclient [oceanbase]> SELECT * FROM oceanbase.GV$OB_PARAMETERS WHERE NAME LIKE '_enable_adaptive_compaction';

   ```

   查询结果如下：

   ```shell
   +----------------+----------+-------+--------+-----------+-----------------------------+-----------+-------+---------------------------------------------------------------------------------+---------+-------------------+---------------+-----------+
   | SVR_IP         | SVR_PORT | ZONE  | SCOPE  | TENANT_ID | NAME                        | DATA_TYPE | VALUE | INFO                                                                            | SECTION | EDIT_LEVEL        | DEFAULT_VALUE | ISDEFAULT |
   +----------------+----------+-------+--------+-----------+-----------------------------+-----------+-------+---------------------------------------------------------------------------------+---------+-------------------+---------------+-----------+
   | 172.xx.xxx.xxx |     2882 | zone1 | TENANT |         1 | _enable_adaptive_compaction | BOOL      | True  | specifies whether allow adaptive compaction schedule and information collection | TENANT  | DYNAMIC_EFFECTIVE | True          | YES       |
   | 172.xx.xxx.xxx |     2882 | zone1 | TENANT |      1001 | _enable_adaptive_compaction | BOOL      | True  | specifies whether allow adaptive compaction schedule and information collection | TENANT  | DYNAMIC_EFFECTIVE | True          | YES       |
   | 172.xx.xxx.xxx |     2882 | zone1 | TENANT |      1002 | _enable_adaptive_compaction | BOOL      | True  | specifies whether allow adaptive compaction schedule and information collection | TENANT  | DYNAMIC_EFFECTIVE | True          | YES       |
   | 172.xx.xxx.xxx |     2882 | zone1 | TENANT |      1003 | _enable_adaptive_compaction | BOOL      | True  | specifies whether allow adaptive compaction schedule and information collection | TENANT  | DYNAMIC_EFFECTIVE | True          | YES       |
   | 172.xx.xxx.xxx |     2882 | zone1 | TENANT |      1004 | _enable_adaptive_compaction | BOOL      | True  | specifies whether allow adaptive compaction schedule and information collection | TENANT  | DYNAMIC_EFFECTIVE | True          | YES       |
   +----------------+----------+-------+--------+-----------+-----------------------------+-----------+-------+---------------------------------------------------------------------------------+---------+-------------------+---------------+-----------+
   5 rows in set

   ```

   查询结果中，`VALUE` 列对应的值为 `True`，表示已开启自适应合并。
 3. 如果未开启自适应合并，可以执行以下语句，开启自适应合并。

   ```shell
   obclient [oceanbase]> ALTER SYSTEM SET _enable_adaptive_compaction = True TENANT = tenant_name;

   ```

   #### 注意

   由于自适应合并调度任务的执行会占用部分系统资源，为了减少系统资源的占用，您可以通过将租户级隐藏配置项 `_enable_adaptive_compaction` 的值修改为 `False` 来关闭除 extreme 模式表以外的其他自适应合并的调度。

## （可选）步骤二：通过表选项 `table_mode` 指定自适应合并策略

开启自适应合并后，为了更加灵活地解决 Buffer 表带来的性能下降问题，OceanBase 数据库在 V4.2.3 版本开始支持表选项 `table_mode`。用户可以通过为每张表设置不同的 `table_mode` 值以便指定不同的快速冻结与自适应合并策略以应对 Buffer 表问题。

您可以在创建表或修改表时，通过表选项 `table_mode` 指定不同模式的自适应合并策略。表选项 `table_mode` 提供了以下 5 种模式来对应不同的合并策略。

| 模式 | 转储后触发合并的概率 |
| --- | --- |
| normal（默认值） | 极低 |
| queuing | 低 |
| moderate | 中 |
| super | 高 |
| extreme | 极高 |

如果您对业务比较熟悉和了解，您可以在创建表时根据业务情况，为表设置一个合适的模式。例如，创建一张 `queuing` 模式的表，示例如下。

```shell
obclient> CREATE TABLE tbl1 (c1 int, c2 double) table_mode = 'queuing';

```

在上述语句中，如果不显式指定 `table_mode` 值，则系统默认创建的是 `normal` 模式的表。

创建表后，当您观测到某张表的读放大现象严重，并出现了 Buffer 表现象时，您可以根据业务需要，手动修改该表的 `table_mode`，以便系统更频繁地触发该表的合并，加速查询。由于合并的频率越高，消耗的计算资源将会更多，建议您根据触发合并的频率从低到高逐级调整 `table_mode` 值。例如，先从 `normal` 调整到 `queuing`，观察一段时间后再从 `queuing` 调整到 `moderate`。调整示例如下。

```shell
obclient> ALTER TABLE tbl1 SET table_mode = 'moderate';

```

修改表的语句执行成功后，系统会有一定的延时（大约 2 分钟），待修改生效后，系统将以配置的合并模式调度自适应合并以解决 Buffer 表现象。

## 相关文档

- [自动触发合并](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004478338)
 - [定时触发合并](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004478344)
 - [手动触发合并](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004478339)
 - [手动控制合并](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004478340)

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