Skip to content

OceanBase 存储引擎指标

核心存储引擎指标

MemTable 指标

  1. MEMTABLE_SIZE:MemTable 大小,单位为字节
  2. MEMTABLE_ROW_COUNT:MemTable 中的行数
  3. MEMTABLE_FLUSH_LATENCY:MemTable 刷新延迟,单位为毫秒
  4. MEMTABLE_FLUSH_COUNT:MemTable 刷新次数
  5. MEMTABLE_FLUSH_BYTES:MemTable 刷新字节数
  6. MEMTABLE_NUM:MemTable 数量

SSTable 指标

  1. SSTABLE_SIZE:SSTable 总大小,单位为字节
  2. SSTABLE_NUM:SSTable 数量
  3. SSTABLE_LEVEL_COUNT:各层级 SSTable 数量
  4. SSTABLE_READ_LATENCY:SSTable 读取延迟,单位为毫秒
  5. SSTABLE_WRITE_LATENCY:SSTable 写入延迟,单位为毫秒

合并指标

  1. MERGE_LATENCY:合并操作延迟,单位为毫秒
  2. MERGE_COUNT:合并操作次数
  3. MERGE_BYTES:合并操作字节数
  4. MERGE_ROW_COUNT:合并操作行数
  5. MERGE_CPU_USAGE:合并操作 CPU 使用率
  6. MERGE_IOPS:合并操作 IOPS

缓存指标

  1. BLOCK_CACHE_HIT_RATE:数据块缓存命中率
  2. BLOCK_CACHE_SIZE:数据块缓存大小,单位为字节
  3. INDEX_CACHE_HIT_RATE:索引缓存命中率
  4. INDEX_CACHE_SIZE:索引缓存大小,单位为字节
  5. ROW_CACHE_HIT_RATE:行缓存命中率
  6. ROW_CACHE_SIZE:行缓存大小,单位为字节

IO 指标

  1. DISK_READ_LATENCY:磁盘读取延迟,单位为毫秒
  2. DISK_WRITE_LATENCY:磁盘写入延迟,单位为毫秒
  3. DISK_READ_THROUGHPUT:磁盘读取吞吐量,单位为 MB/s
  4. DISK_WRITE_THROUGHPUT:磁盘写入吞吐量,单位为 MB/s
  5. DISK_IOPS:磁盘 IOPS
  6. DISK_UTILIZATION:磁盘使用率

存储引擎指标监控

内置视图监控

sql
-- 查看 MemTable 状态
SELECT * FROM oceanbase.GV$OB_MEMTABLE_STATUS;

-- 查看 SSTable 状态
SELECT * FROM oceanbase.GV$OB_SSTABLE_STATUS;

-- 查看合并状态
SELECT * FROM oceanbase.GV$OB_MERGE_STATUS;

-- 查看缓存状态
SELECT * FROM oceanbase.GV$OB_CACHE_STATUS;

-- 查看 IO 状态
SELECT * FROM oceanbase.GV$OB_IO_STATUS;

OCP 监控

通过 OCP(OceanBase Cloud Platform)可以直观地监控存储引擎指标:

  1. 登录 OCP 控制台
  2. 进入集群详情页
  3. 选择 "监控" 标签页
  4. 选择 "存储引擎" 监控视图
  5. 查看相关指标的实时数据和历史趋势

Prometheus + Grafana 监控

  1. 配置 Prometheus:配置 Prometheus 采集 OceanBase 指标
  2. 配置 Grafana:导入 OceanBase 存储引擎监控面板
  3. 设置告警规则:根据业务需求设置告警规则
  4. 查看监控数据:在 Grafana 中查看存储引擎指标的实时数据和历史趋势

存储引擎指标分析

MemTable 分析

  1. MemTable 大小分析:MemTable 过大可能导致刷新频繁,影响性能;过小可能导致内存利用率低
  2. MemTable 刷新分析:频繁的 MemTable 刷新可能导致磁盘 I/O 压力过大
  3. MemTable 数量分析:MemTable 数量过多可能导致内存占用过高

SSTable 分析

  1. SSTable 层级分析:合理的 SSTable 层级分布有助于提高查询性能
  2. SSTable 大小分析:过大的 SSTable 可能导致查询延迟增加
  3. SSTable 数量分析:过多的 SSTable 可能导致合并压力过大

合并分析

  1. 合并延迟分析:合并延迟过高可能影响查询性能
  2. 合并频率分析:过于频繁的合并可能导致磁盘 I/O 和 CPU 压力过大
  3. 合并资源消耗分析:合并操作消耗过多资源可能影响其他操作

缓存分析

  1. 缓存命中率分析:缓存命中率过低可能导致查询延迟增加
  2. 缓存大小分析:缓存大小不合理可能导致资源浪费或缓存命中率低
  3. 缓存热点分析:识别缓存热点,优化缓存策略

存储引擎指标优化

MemTable 优化

sql
-- 调整 MemTable 大小
ALTER SYSTEM SET memstore_limit_percentage = 50;

-- 调整 MemTable 刷新触发阈值
ALTER SYSTEM SET freeze_trigger_percentage = 70;

-- 调整 MemTable 最大数量
ALTER SYSTEM SET max_memstore_num = 10;

合并优化

sql
-- 调整合并调度策略
ALTER SYSTEM SET merge_strategy = 'priority';

-- 调整合并并发度
ALTER SYSTEM SET merge_concurrency = 4;

-- 调整合并速度
ALTER SYSTEM SET merge_speed_limit = '100M';

-- 调整合并触发条件
ALTER SYSTEM SET minor_merge_trigger = 3;

缓存优化

sql
-- 调整数据块缓存大小
ALTER SYSTEM SET block_cache_size = '4G';

-- 调整索引缓存大小
ALTER SYSTEM SET index_cache_size = '2G';

-- 调整行缓存大小
ALTER SYSTEM SET row_cache_size = '1G';

-- 调整缓存淘汰策略
ALTER SYSTEM SET block_cache_evict_policy = 'lru';

IO 优化

sql
-- 调整 IO 调度策略
ALTER SYSTEM SET io_scheduler = 'noop';

-- 调整 IO 并发度
ALTER SYSTEM SET io_concurrency = 16;

-- 调整 IO 队列深度
ALTER SYSTEM SET io_queue_depth = 32;

-- 调整 IO 超时时间
ALTER SYSTEM SET io_timeout = 30000;

存储引擎指标最佳实践

监控建议

  1. 设置合理的告警阈值:根据业务需求和集群规模设置合理的告警阈值
  2. 监控关键指标:重点监控 MemTable 大小、SSTable 数量、合并延迟和缓存命中率
  3. 定期分析历史数据:定期分析历史监控数据,识别潜在问题
  4. 建立基线:建立正常情况下的指标基线,便于识别异常

优化建议

  1. 持续优化:根据监控数据持续优化存储引擎配置
  2. 定期评估:定期评估存储引擎性能,根据业务需求调整配置
  3. 考虑业务特性:根据业务的读写比例、数据规模等特性调整存储引擎配置
  4. 测试验证:在进行配置优化后,进行测试验证,确保优化效果

故障排查建议

  1. 快速定位问题:根据监控指标快速定位问题节点和原因
  2. 分级处理:根据问题严重程度采取不同的处理措施
  3. 记录排查过程:详细记录故障排查过程和处理措施
  4. 总结经验:定期总结故障处理经验,完善故障处理流程

常见问题(FAQ)

Q1: MemTable 过大怎么办?

A1: MemTable 过大可能导致刷新频繁,影响性能。可以通过以下方式解决:

  1. 调整 MemTable 大小限制
  2. 调整 MemTable 刷新触发阈值
  3. 优化业务写入模式,减少大事务
sql
-- 调整 MemTable 大小限制
ALTER SYSTEM SET memstore_limit_percentage = 40;

-- 调整 MemTable 刷新触发阈值
ALTER SYSTEM SET freeze_trigger_percentage = 60;

Q2: 合并操作导致性能下降怎么办?

A2: 合并操作导致性能下降时,可以尝试以下优化:

  1. 调整合并调度策略,避开业务高峰期
  2. 调整合并并发度和速度
  3. 优化 SSTable 层级结构
  4. 增加存储节点资源
sql
-- 调整合并调度策略为手动
ALTER SYSTEM SET merge_strategy = 'manual';

-- 调整合并速度限制
ALTER SYSTEM SET merge_speed_limit = '50M';

Q3: 缓存命中率低怎么办?

A3: 缓存命中率低可能导致查询延迟增加。可以通过以下方式解决:

  1. 增加缓存大小
  2. 优化缓存淘汰策略
  3. 优化查询语句,减少扫描范围
  4. 分析缓存热点,优化数据访问模式
sql
-- 增加数据块缓存大小
ALTER SYSTEM SET block_cache_size = '8G';

-- 调整缓存淘汰策略
ALTER SYSTEM SET block_cache_evict_policy = 'lfu';

Q4: 如何优化存储引擎性能?

A4: 可以通过以下方式优化存储引擎性能:

  1. 调整 MemTable 配置
  2. 优化合并策略
  3. 调整缓存配置
  4. 优化 IO 配置
  5. 优化数据模型和索引设计

Q5: 如何监控存储引擎的健康状态?

A5: 可以通过以下方式监控存储引擎的健康状态:

  1. 监控核心存储引擎指标
  2. 设置合理的告警规则
  3. 定期分析历史数据
  4. 进行存储引擎健康检查
sql
-- 运行存储引擎健康检查
SELECT * FROM oceanbase.GV$OB_STORAGE_ENGINE_HEALTH;