首批通过分布式安全可靠测评,为关键业务系统打造
自适应合并
更新时间:2026-04-10 11:58:01
OceanBase 数据库从 V4.1.0 版本开始支持自适应合并。开启自适应合并后,系统会实时采集并统计用户的查询、写入等信息,再根据这些信息来识别可能导致的查询慢的场景,自适应地调度合并任务,达到对用户无感知地解决相关场景可能导致的慢查询问题。自适应合并开启期间,系统以分区为维度进行统计信息的采集及合并任务的调度。
使用自适应合并功能,可以解决如下问题:
避免一部分 Buffer 表问题的出现。
优化导数场景下的查询性能。
识别并规避一部分慢查询场景。
触发规则
当分区 Leader 满足一定条件时,系统就会自动为该分区及 Follower 副本调度自适应合并。自适应合并的触发规则如下:
系统通过分析一段时间内分区的统计信息,获取到该分区查询和转储的次数以及增量数据中 Insert 行数的占比,确认该场景是否为导数场景。如果是导数场景,则对该分区触发自适应合并。
系统通过分析一段时间内分区的统计信息,获取到该分区转储的次数以及增量数据中更新和删除行的占比,确认该场景是否为导数场景。如果是导数场景,则对该分区触发自适应合并。
系统通过统计分区增量数据的总行数,确认该场景是否为持续写入场景,如果是持续写入场景,系统对该分区触发自适应合并。
系统通过查询扫描的数据量与实际有效数据的比例,确认针对该分区的查询是否为慢查询,如果为慢查询,系统对该分区触发自适应合并。
注意事项
自适应合并可以有效减少一部分查询慢的问题,如果您的业务对查询性能要求比较高,并且存在自适应合并所支持的场景时,建议不要关闭自适应合并功能。
在 OceanBase 数据库中,名称以 "_" 开头的配置项均为隐藏配置项,仅供开发人员在故障排查或紧急运维时使用。如果确认需要关闭自适应合并功能,请联系技术支持人员协助处理。
开启或关闭自适应合并
自适应合并功能由租户级隐藏配置项 _enable_adaptive_compaction 进行控制,默认为开启状态。
由于自适应合并调度任务的执行会占用部分系统资源,如果不希望执行自适应合并操作,可以通过将租户级隐藏配置项 _enable_adaptive_compaction 的值修改为 False 来关闭自适应合并功能。关闭后,系统内部将不再进行自适应合并的调度。
使用
root用户登录集群的sys租户。查询租户级隐藏配置项
_enable_adaptive_compaction的值。obclient [oceanbase]> SELECT * FROM oceanbase.GV$OB_PARAMETERS WHERE NAME LIKE '_enable_adaptive_compaction';查询结果如下:
+----------------+----------+-------+--------+-----------+-----------------------------+-----------+-------+---------------------------------------------------------------------------------+---------+-------------------+---------------+-----------+ | 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修改租户级隐藏配置项
_enable_adaptive_compaction的值,关闭或开启自适应合并功能。obclient [oceanbase]> ALTER SYSTEM SET _enable_adaptive_compaction = False TENANT = tenant_name;obclient [oceanbase]> ALTER SYSTEM SET _enable_adaptive_compaction = True TENANT = tenant_name;