首批通过分布式安全可靠测评,为关键业务系统打造
清理 WR 数据
更新时间:2026-04-15 17:16:59
通过使用 SQL 语句检查 WR 存储占用情况,WR 本身占用内存不多,如果 WR 占用存储太多可以使用 DBMS 包对数据进行删除。
操作步骤
查看 WR 占用的空间。
查看 SSTable 中 WR 占用的空间。
通过
__all_virtual_table、__all_virtual_tablet_meta_table和__all_virtual_ls_meta_table表查看 SSTable 中 WR 占用的空间:select sum(b.data_size) from __all_virtual_table a inner join __all_virtual_tablet_meta_table b on a.tenant_id=b.tenant_id and a.tablet_id=b.tablet_id left join __all_virtual_ls_meta_table c on b.tenant_id=c.tenant_id and b.ls_id = c.ls_id and b.svr_ip=c.svr_ip and b.svr_port = c.svr_port where a.table_name like "__wr_%" and a.tablet_id != 0;返回结果如下:
+------------------+ | sum(b.data_size) | +------------------+ | 1196806 | +------------------+ 1 row in set (0.079 sec)其中 data_size 表示表中存储的数据的总大小,单位为字节。
查看 MemTable 中 WR 占用的空间。
通过
__all_virtual_table、__all_virtual_memstore_info和__all_virtual_ls_meta_table表查看 SSTable 中 WR 占用的空间:select sum(mem_used), sum(hash_mem_used), sum(btree_mem_used) from __all_virtual_table a inner join __all_virtual_memstore_info b on a.tenant_id=b.tenant_id and a.tablet_id=b.tablet_id left join __all_virtual_ls_meta_table c on b.tenant_id=c.tenant_id and b.ls_id = c.ls_id and b.svr_ip=c.svr_ip and b.svr_port = c.svr_port where a.table_name like "__wr%" and a.tablet_id != 0;返回结果如下:
+---------------+--------------------+---------------------+ | sum(mem_used) | sum(hash_mem_used) | sum(btree_mem_used) | +---------------+--------------------+---------------------+ | 46137344 | 4207936 | 352 | +---------------+--------------------+---------------------+ 1 row in set (0.087 sec)参数说明:
字段 描述 mem_used 表在内存中使用的总内存量,单位为字节 hash_mem_used 哈希表在内存中使用的总内存量,单位为字节 btree_mem_used 树索引在内存中使用的总内存量,单位为字节
清理 WR 占用的空间。 使用 DBMS 包进行清理 WR 占用空间时,清理之后需要执行一次合并。
首先要查询租户下所有的 SNAP_ID。
obclient [oceanbase]> select count(1),min(snap_id), max(snap_id) from oceanbase.DBA_WR_SNAPSHOT;返回结果如下:
+----------+--------------+--------------+ | count(1) | min(snap_id) | max(snap_id) | +----------+--------------+--------------+ | 230 | 47 | 276 | +----------+--------------+--------------+ 1 row in set (0.051 sec)此时查询到系统中 SNAP_ID 的范围为 [47,,276]。
删除 SNAP_ID 范围内的快照数据,例如删除 SNAP_ID 从 47 到 275 范围内的数据。
obclient [oceanbase]> CALL DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE('47','275'); Query OK, 0 rows affected, 4 warnings (4.129 sec)查看 SNAP_ID 是否删除成功。
obclient [oceanbase]> select count(1),min(snap_id), max(snap_id) from oceanbase.DBA_WR_SNAPSHOT;返回结果如下:
+----------+--------------+--------------+ | count(1) | min(snap_id) | max(snap_id) | +----------+--------------+--------------+ | 1 | 276 | 276 | +----------+--------------+--------------+ 1 row in set (0.043 sec)此时 SNAP_ID 的值为 276,说明删除 SNAP_ID 成功。
进行合并操作释放空间。有关合并的详细信息,请参见 合并。
执行合并操作。
说明
不建议在业务高峰期执行手动合并。
obclient [oceanbase]> ALTER SYSTEM MAJOR FREEZE TENANT = sys; Query OK, 0 rows affected (0.049 sec)通过
oceanbase.CDB_OB_ZONE_MAJOR_COMPACTION视图查看合并操作是否完成,当STATUS字段的值变为IDLE时,表示合并完成。obclient [oceanbase]> SELECT * FROM oceanbase.CDB_OB_ZONE_MAJOR_COMPACTION where tenant_id = 1;此时
STATUS字段的值为COMPACTING表示正在合并中。+-----------+-------+---------------------+---------------------+----------------------------+----------------------------+------------+ | TENANT_ID | ZONE | BROADCAST_SCN | LAST_SCN | LAST_FINISH_TIME | START_TIME | STATUS | +-----------+-------+---------------------+---------------------+----------------------------+----------------------------+------------+ | 1 | zone1 | 1695798402011671173 | 1695751201399410304 | 2023-09-27 02:02:14.339229 | 2023-09-27 15:06:42.095810 | COMPACTING | +-----------+-------+---------------------+---------------------+----------------------------+----------------------------+------------+ 1 row in set (0.051 sec)可以稍等 1-2 分钟,等待合并完成。
+-----------+-------+---------------------+---------------------+----------------------------+----------------------------+--------+ | TENANT_ID | ZONE | BROADCAST_SCN | LAST_SCN | LAST_FINISH_TIME | START_TIME | STATUS | +-----------+-------+---------------------+---------------------+----------------------------+----------------------------+--------+ | 1 | zone1 | 1695798402011671173 | 1695798402011671173 | 2023-09-27 15:08:36.406838 | 2023-09-27 15:06:42.095810 | IDLE | +-----------+-------+---------------------+---------------------+----------------------------+----------------------------+--------+ 1 row in set (0.043 sec)
合并完成后查看清理后的占用空间。
查看 SSTable 中 WR 占用的空间。
通过
__all_virtual_table、__all_virtual_tablet_meta_table和__all_virtual_ls_meta_table表查看 SSTable 中 WR 占用的空间:select sum(b.data_size) from __all_virtual_table a inner join __all_virtual_tablet_meta_table b on a.tenant_id=b.tenant_id and a.tablet_id=b.tablet_id left join __all_virtual_ls_meta_table c on b.tenant_id=c.tenant_id and b.ls_id = c.ls_id and b.svr_ip=c.svr_ip and b.svr_port = c.svr_port where a.table_name like "__wr_%" and a.tablet_id != 0;返回结果如下,说明在 SSTable 中 WR 占用空间已被释放。
+------------------+ | sum(b.data_size) | +------------------+ | 482353 | +------------------+ 1 row in set (0.065 sec)- 查看 MemTable 中 WR 占用的空间。
通过
__all_virtual_table、__all_virtual_memstore_info和__all_virtual_ls_meta_table表查看 SSTable 中 WR 占用的空间:select sum(mem_used), sum(hash_mem_used), sum(btree_mem_used) from __all_virtual_table a inner join __all_virtual_memstore_info b on a.tenant_id=b.tenant_id and a.tablet_id=b.tablet_id left join __all_virtual_ls_meta_table c on b.tenant_id=c.tenant_id and b.ls_id = c.ls_id and b.svr_ip=c.svr_ip and b.svr_port = c.svr_port where a.table_name like "__wr%" and a.tablet_id != 0;返回结果如下,说明在 MemTable 中 WR 占用空间已被释放。
+---------------+--------------------+---------------------+ | sum(mem_used) | sum(hash_mem_used) | sum(btree_mem_used) | +---------------+--------------------+---------------------+ | 12582912 | 1053952 | 128 | +---------------+--------------------+---------------------+ 1 row in set (0.076 sec)