外观
OceanBase 存储引擎指标
核心存储引擎指标
MemTable 指标
- MEMTABLE_SIZE:MemTable 大小,单位为字节
- MEMTABLE_ROW_COUNT:MemTable 中的行数
- MEMTABLE_FLUSH_LATENCY:MemTable 刷新延迟,单位为毫秒
- MEMTABLE_FLUSH_COUNT:MemTable 刷新次数
- MEMTABLE_FLUSH_BYTES:MemTable 刷新字节数
- MEMTABLE_NUM:MemTable 数量
SSTable 指标
- SSTABLE_SIZE:SSTable 总大小,单位为字节
- SSTABLE_NUM:SSTable 数量
- SSTABLE_LEVEL_COUNT:各层级 SSTable 数量
- SSTABLE_READ_LATENCY:SSTable 读取延迟,单位为毫秒
- SSTABLE_WRITE_LATENCY:SSTable 写入延迟,单位为毫秒
合并指标
- MERGE_LATENCY:合并操作延迟,单位为毫秒
- MERGE_COUNT:合并操作次数
- MERGE_BYTES:合并操作字节数
- MERGE_ROW_COUNT:合并操作行数
- MERGE_CPU_USAGE:合并操作 CPU 使用率
- MERGE_IOPS:合并操作 IOPS
缓存指标
- BLOCK_CACHE_HIT_RATE:数据块缓存命中率
- BLOCK_CACHE_SIZE:数据块缓存大小,单位为字节
- INDEX_CACHE_HIT_RATE:索引缓存命中率
- INDEX_CACHE_SIZE:索引缓存大小,单位为字节
- ROW_CACHE_HIT_RATE:行缓存命中率
- ROW_CACHE_SIZE:行缓存大小,单位为字节
IO 指标
- DISK_READ_LATENCY:磁盘读取延迟,单位为毫秒
- DISK_WRITE_LATENCY:磁盘写入延迟,单位为毫秒
- DISK_READ_THROUGHPUT:磁盘读取吞吐量,单位为 MB/s
- DISK_WRITE_THROUGHPUT:磁盘写入吞吐量,单位为 MB/s
- DISK_IOPS:磁盘 IOPS
- 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)可以直观地监控存储引擎指标:
- 登录 OCP 控制台
- 进入集群详情页
- 选择 "监控" 标签页
- 选择 "存储引擎" 监控视图
- 查看相关指标的实时数据和历史趋势
Prometheus + Grafana 监控
- 配置 Prometheus:配置 Prometheus 采集 OceanBase 指标
- 配置 Grafana:导入 OceanBase 存储引擎监控面板
- 设置告警规则:根据业务需求设置告警规则
- 查看监控数据:在 Grafana 中查看存储引擎指标的实时数据和历史趋势
存储引擎指标分析
MemTable 分析
- MemTable 大小分析:MemTable 过大可能导致刷新频繁,影响性能;过小可能导致内存利用率低
- MemTable 刷新分析:频繁的 MemTable 刷新可能导致磁盘 I/O 压力过大
- MemTable 数量分析:MemTable 数量过多可能导致内存占用过高
SSTable 分析
- SSTable 层级分析:合理的 SSTable 层级分布有助于提高查询性能
- SSTable 大小分析:过大的 SSTable 可能导致查询延迟增加
- SSTable 数量分析:过多的 SSTable 可能导致合并压力过大
合并分析
- 合并延迟分析:合并延迟过高可能影响查询性能
- 合并频率分析:过于频繁的合并可能导致磁盘 I/O 和 CPU 压力过大
- 合并资源消耗分析:合并操作消耗过多资源可能影响其他操作
缓存分析
- 缓存命中率分析:缓存命中率过低可能导致查询延迟增加
- 缓存大小分析:缓存大小不合理可能导致资源浪费或缓存命中率低
- 缓存热点分析:识别缓存热点,优化缓存策略
存储引擎指标优化
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;存储引擎指标最佳实践
监控建议
- 设置合理的告警阈值:根据业务需求和集群规模设置合理的告警阈值
- 监控关键指标:重点监控 MemTable 大小、SSTable 数量、合并延迟和缓存命中率
- 定期分析历史数据:定期分析历史监控数据,识别潜在问题
- 建立基线:建立正常情况下的指标基线,便于识别异常
优化建议
- 持续优化:根据监控数据持续优化存储引擎配置
- 定期评估:定期评估存储引擎性能,根据业务需求调整配置
- 考虑业务特性:根据业务的读写比例、数据规模等特性调整存储引擎配置
- 测试验证:在进行配置优化后,进行测试验证,确保优化效果
故障排查建议
- 快速定位问题:根据监控指标快速定位问题节点和原因
- 分级处理:根据问题严重程度采取不同的处理措施
- 记录排查过程:详细记录故障排查过程和处理措施
- 总结经验:定期总结故障处理经验,完善故障处理流程
常见问题(FAQ)
Q1: MemTable 过大怎么办?
A1: MemTable 过大可能导致刷新频繁,影响性能。可以通过以下方式解决:
- 调整 MemTable 大小限制
- 调整 MemTable 刷新触发阈值
- 优化业务写入模式,减少大事务
sql
-- 调整 MemTable 大小限制
ALTER SYSTEM SET memstore_limit_percentage = 40;
-- 调整 MemTable 刷新触发阈值
ALTER SYSTEM SET freeze_trigger_percentage = 60;Q2: 合并操作导致性能下降怎么办?
A2: 合并操作导致性能下降时,可以尝试以下优化:
- 调整合并调度策略,避开业务高峰期
- 调整合并并发度和速度
- 优化 SSTable 层级结构
- 增加存储节点资源
sql
-- 调整合并调度策略为手动
ALTER SYSTEM SET merge_strategy = 'manual';
-- 调整合并速度限制
ALTER SYSTEM SET merge_speed_limit = '50M';Q3: 缓存命中率低怎么办?
A3: 缓存命中率低可能导致查询延迟增加。可以通过以下方式解决:
- 增加缓存大小
- 优化缓存淘汰策略
- 优化查询语句,减少扫描范围
- 分析缓存热点,优化数据访问模式
sql
-- 增加数据块缓存大小
ALTER SYSTEM SET block_cache_size = '8G';
-- 调整缓存淘汰策略
ALTER SYSTEM SET block_cache_evict_policy = 'lfu';Q4: 如何优化存储引擎性能?
A4: 可以通过以下方式优化存储引擎性能:
- 调整 MemTable 配置
- 优化合并策略
- 调整缓存配置
- 优化 IO 配置
- 优化数据模型和索引设计
Q5: 如何监控存储引擎的健康状态?
A5: 可以通过以下方式监控存储引擎的健康状态:
- 监控核心存储引擎指标
- 设置合理的告警规则
- 定期分析历史数据
- 进行存储引擎健康检查
sql
-- 运行存储引擎健康检查
SELECT * FROM oceanbase.GV$OB_STORAGE_ENGINE_HEALTH;