首批通过分布式安全可靠测评,为关键业务系统打造
OceanBase 数据库合并的常见问题
更新时间:2026-06-15 09:16
本文介绍如何查看合并的状态、进度和磁盘使用量,以及如何触发、加速/放慢合并,排查合并问题。
如何查看合并状态?
通过以下 SQL 查询 __ALL_ZONE 表,查看 INFO 列为 IDLE 对应行的 gmt_modified 列值,该值表示最近一次合并的完成时间。
obclient> SELECT * FROM __ALL_ZONE WHERE INFO LIKE '%IDLE%';
+----------------------------+----------------------------+-------+--------------+-------+------+
| gmt_create | gmt_modified | zone | name | value | info |
+----------------------------+----------------------------+-------+--------------+-------+------+
| 2021-03-24 10:33:04.727508 | 2021-03-31 02:01:41.263266 | | merge_status | 0 | IDLE |
| 2021-03-24 10:33:04.729196 | 2021-03-31 02:01:31.046593 | zone1 | merge_status | 0 | IDLE |
| 2021-03-24 10:33:04.730523 | 2021-03-31 02:00:50.346948 | zone2 | merge_status | 0 | IDLE |
| 2021-03-24 10:33:04.731953 | 2021-03-31 02:00:50.349732 | zone3 | merge_status | 0 | IDLE |
+----------------------------+----------------------------+-------+--------------+-------+------+
如何查看合并过程的磁盘用量?
可以通过 __ALL_VIRTUAL_DISK_STAT 查询 total_size 与 free_size,并计算使用量。
obclient> SELECT svr_ip,svr_port,total_size/1024/1024/1024 AS total, free_size/1024/1024/1024 AS free,(total_size-free_size)/1024/1024/1024 as used
FROM __all_virtual_disk_stat;
+----------------+----------+------------------+------------------+----------------+
| svr_ip | svr_port | total | free | used |
+----------------+----------+------------------+------------------+----------------+
| xxx.xx.xxx.xxx | 2882 | 176.552734375000 | 176.269531250000 | 0.283203125000 |
| xxx.xx.xxx.xxx | 2882 | 176.552734375000 | 176.177734375000 | 0.375000000000 |
| xxx.xx.xxx.xxx | 2882 | 176.552734375000 | 176.177734375000 | 0.375000000000 |
+----------------+----------+------------------+------------------+----------------+
3 rows in set (0.01 sec)
如何排查合并过程中的写入放大问题?
Frozen MemTable 内存需要等到转储或合并结束后,才会被清空并重新使用,可能导致有限的空闲 MemStore在写入量大的场景被写满。
可以通过查询 gv$memstore 视图查看内存使用情况,其中 ACTIVE 列表示可用的内存,TOTAL 列表示总内存。
SELECT * FROM gv$memstore;
可以通过配置freeze_trigger_percentage降低触发内存清空百分比。freeze_trigger_percentage用于设置触发全局冻结的租户内存使用的阈值,默认为 70,取值范围为 1 ~ 99。有关该配置项的详细信息,请参见 OceanBase 数据库《参考指南》中的 系统配置项 章节。
如何查看合并速度?
可以通过 OCP 中监控查看合并速度,本文以 OCP V2.4.4 为例。
登录 OCP。
在左侧导航栏上单击 集群 ,单击要查看合并速度的集群名称,进入 集群概览 页面。
在左侧导航栏单击 合并管理 ,查看合并耗时。

如何延迟触发合并?
freeze_trigger_percentage 用于设置触发全局冻结的租户内存使用的阈值,默认为 70,取值范围为 1 ~ 99。有关该配置项的详细信息,请参见 OceanBase 数据库《参考指南》中的 系统配置项 章节。
将该参数调整为一个更大的值,可以延迟触发的时间。
obclient> ALTER SYSTEM SET freeze_trigger_percentage=80;
如何暂停或继续合并?
OceanBase 数据库提供了暂停与继续的 SQL 语句接口,可以通过以下 SQL 暂停或继续合并。
通过以下 SQL 语句暂停合并。
obclient> ALTER SYSTEM SUSPEND MERGE;通过以下 SQL 语句继续合并。
obclient> alter system resume merge;
如何加快或放慢合并速度?
可以通过调整合并的线程数的方式调整合并速度。merge_thread_count 用于设置每日合并工作的线程数,默认为 0,表示取 10 与 CPU 数量 * 0.3 的较小值。取值范围为 0 ~ 64。有关该配置项的详细信息,请参见 OceanBase 数据库《参考指南》中的 系统配置项 章节。 注意
无论 merge_thread_count 设置为何值,OceanBase 数据库用于合并的线程数都不会超过 48。