OceanBase 转储的热点表怎么找
在 OceanBase 数据库中,“转储” 通常指将内存中的增量数据(MemTable)持久化为磁盘上的 SSTable 的过程,而**“热点表”** 则是指被高频访问、读写操作密集的表。要找到“转储的热点表”,本质上是定位那些在转储过程中或转储后仍持续高负载、高访问量的表 。
虽然 OceanBase 官方文档未直接提供“转储热点表”的查询视图,但可以通过以下组合方法定位:
一、通过系统视图定位高负载表
OceanBase 提供了丰富的系统视图,可用于监控表的访问频率和资源消耗:
-
gv$ob_sqlstat:查看 SQL 执行统计,可筛选出执行次数多、耗时长的 SQL,进而定位到对应的表。 -
gv$ob_table_stat:查看表的访问统计,如logical_read、physical_read、insert_count、update_count、delete_count等,数值高的表即为热点表。 -
gv$ob_partition_stat:查看分区的访问统计,可定位到具体分区级别的热点。
示例 SQL:
-- 查看访问次数最多的表
SELECT table_name, logical_read, physical_read, insert_count, update_count, delete_count
FROM gv$ob_table_stat
ORDER BY logical_read DESC
LIMIT 10;
二、结合转储信息定位
虽然转储本身是后台异步操作,但可通过以下方式间接判断哪些表在转储后仍保持高负载:
-
gv$ob_memstore:查看 MemTable 的大小和转储频率,MemTable 增长快的表,往往也是热点表。 -
gv$ob_sstable:查看 SSTable 的数量和大小,频繁转储的表通常 SSTable 数量多、体积小(因频繁合并)。
示例 SQL:
sql
编辑
-- 查看 MemTable 大小和转储频率高的表
SELECT table_name, memstore_size, flush_count
FROM gv$ob_memstore
ORDER BY flush_count DESC
LIMIT 10;
三、使用 OCP(OceanBase Cloud Platform)图形化监控
如果部署了 OCP,可通过其“性能监控”模块:
- 查看“SQL 性能” → “Top SQL” → 定位高频 SQL → 关联表。
- 查看“表性能” → “Top 表” → 直接看到逻辑读、物理读、DML 次数最高的表。
- 查看“转储监控” → “转储频率” → 结合“表访问频率”交叉分析。
四、综合判断“转储热点表”
真正的“转储热点表”应同时满足:
- 转储频繁 (MemTable 频繁 flush)
- 访问量大 (逻辑读、DML 操作多)
- 资源消耗高 (CPU、I/O 占用高)
可将上述视图结果交叉比对,筛选出同时满足多个条件的表。
五、优化建议
找到热点表后,可考虑:
- 分区优化 :对热点表进行更细粒度的分区,分散负载。
- 索引优化 :避免全表扫描,减少逻辑读。
- 资源隔离 :将热点表分配到独立的资源池或租户,避免影响其他业务。
- 读写分离 :对只读热点表,可配置只读副本分担压力。
总结
OceanBase 中“转储的热点表”并非一个独立的系统视图,而是通过访问统计 + 转储频率 + 资源消耗 多维度交叉分析得出的结果。推荐优先使用 gv$ob_table_stat 和 gv$ob_memstore 视图进行定位,结合 OCP 图形化监控更高效。