欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > OBCP第二章 OceanBase 存储引擎高级技术学习笔记

OBCP第二章 OceanBase 存储引擎高级技术学习笔记

2025/6/23 20:10:44 来源:https://blog.csdn.net/njj54188/article/details/148740810  浏览:    关键词:OBCP第二章 OceanBase 存储引擎高级技术学习笔记

OceanBase 存储引擎高级技术学习笔记

一、内存管理

1. 内存分配层次

OS总内存
observer总内存--由memory_limit/memory_limit_percentage设定
为 OS 预留内存
系统内部内存--通过system_memory设定
租户可用内存
SYS租户: MemStore + KVCache
租户1: MemStore + KVCache
租户N: MemStore + KVCache

不可动态伸缩的内存:MemStore
大小由参数memstore_limit_percentage决定,表示租户的MemStore 部分占租户总内存的百分比;MemStore用来保存DML产生的增量数据,空间不可被占用。

可动态伸缩的内存:KVCache
保存来自SSTable的热数据,提高查询速度;KVCache空间会被其它众多内存模块复用

2. 关键参数

参数说明默认值动态生效
memory_limit直接设置OB进程内存上限(单位MB)-
memory_limit_percentage按物理内存百分比设置OB内存上限-
system_memory系统内部内存大小(不属于任何租户)30G
memstore_limit_percentage租户MemStore内存占比(不可动态伸缩)50
freeze_trigger_percentage触发冻结的内存使用阈值70

注意: memory_limit=0时,memory_limit_percentage决定observer内存大小;否则由memory_limit决定observer内存大小

3. 配置示例

-- 设置OB进程内存上限为40GB
ALTER SYSTEM SET memory_limit='40G';-- 查看内存参数
SHOW PARAMETERS LIKE '%memory%';

二、LSM Tree 架构

在这里插入图片描述

存储架构概述
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002013392

核心设计

MemTable
内存增量数据
Mini SSTable
L0层
Minor SSTable
L1层
Major SSTable
L2层

转储后的结构称之为 Mini SSTable 或者是 Minor SSTable
合并时,表分区所有的 Minor SSTable 会根据合并快照点一起参与做 Major Compaction,最后会生成 Major SSTable

数据合并流程

  1. 冻结(Freeze):MemStore 达到阈值时冻结
  2. 转储(Minor Freeze):冻结数据写入 Mini SSTable(L0)
  3. 合并(Major Freeze):增量数据与基线 SSTable 合并

三、转储(Minor Freeze)

转储基本概念

1. 触发场景

  • MemStore 使用率 ≥ freeze_trigger_percentage
  • 批量数据导入需快速释放内存
  • 避免业务高峰触发 Major Freeze

2. 关键参数

参数作用
minor_freeze_times转储次数达到后触发合并(0=关闭转储)
minor_merge_concurrency并发转储分区数(影响性能)

3. 手动触发命令

-- 对所有租户/Observer转储
ALTER SYSTEM MINOR FREEZE;-- 指定租户转储
ALTER SYSTEM MINOR FREEZE TENANT='tenant1';-- 指定分区转储
ALTER SYSTEM MINOR FREEZE PARTITION_ID='partidx%partcount@tableid';

4.查看转储记录

MemStore使用率达到freeze_trigger_percentage而触发的租户级转储,在__all_server_event_history表中查询

手动转储,在__all_rootservice_event_history表中可以查到具体的选项

5.转储对数据库的影响

转储的优势

每个租户的转储不影响observer上其它的租户,也不会触发集群级转储,避免关联影响
资源消耗小,对在线业务性能影响较低
耗时相对较短,MemStore更快释放,降低发生MemStore写满的概率

转储的副作用

数据层级增多,查询链路变长,查询性能下降
冗余数据增多,占用更多磁盘空间


四、合并(Major Freeze)

1. 触发方式

方式命令/参数
定时合并major_freeze_duty_time='02:00'
MemStore 超阈值freeze_trigger_percentage + minor_freeze_times
手动触发ALTER SYSTEM MAJOR FREEZE;

查看合并状态
https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000357884

 select * from __all_zone; select * from __all_zone where name = 'merge_status';

2. 轮转合并配置

在这里插入图片描述

-- 启用轮转合并
ALTER SYSTEM SET enable_manual_merge = false; --设置为true时,不支持任何形式的自动合并
ALTER SYSTEM SET enable_merge_by_turn = true; --- 开启轮转合并
ALTER SYSTEM SET zone_merge_order = 'z1,z2,z3'; --设置合并顺序-- 查看合并状态
SELECT * FROM __all_zone WHERE name = 'merge_status';

3. 合并控制参数

参数作用
merge_thread_count合并线程数(默认0=自适应)
zone_merge_timeout单Zone合并超时阈值(默认3h)
max_kept_major_version_number保留历史版本数(默认2)
zone_merge_concurrency在合并时,支持多少个 Zone 并发

4.合并注意事项

合并超时时间

  • 由参数zone_merge_timeout定义超时阈值;默认值为'3h'(3个小时)
  • 如果某个ZONE的合并执行超过阈值,合并状态被设置为TIMEOUT

空间警告水位

  • 参数data_disk_usage_limit_percentage定义数据文件最大可以写入的百分比(超出阈值后禁止数据迁入),默认值90。
  • 当数据盘空间使用量超过阈值后,合并任务打印ERROR警告日志,合并任务失败;需要尽快扩大数据盘物理空间,并调大data_disk_usage_limit_percentage参数的值
  • 当数据盘空间使用量超过阈值后,禁止数据迁入
  • 参数datafile_disk_percentage定义数据盘空间使用阈值(占用data_dir所在磁盘总空间百分比),默认值90
  • 参数datafile_size 用于设置数据文件的大小,该配置项与 datafile_disk_percentage 同时配置时,以该配置项设置的值为准,默认值为0

5. 合并历史版本查询

-- 查询历史版本号
SELECT zone, svr_ip, major_version 
FROM __all_virtual_partition_sstable_image_info;-- 指定版本查询(利用Hint)
SELECT /*+ frozen_version(22) */ * FROM table_name;

查看合并记录和状态


五、转储 vs 合并对比

特性转储(Minor Freeze)合并(Major Freeze)
触发层级集群、server、租户、Replica 级别集群级
数据层级产生Minor SSTable(增量)生成Major SSTable(全量)
资源消耗低(仅涉及增量数据)高(涉及全量数据合并)
内存释放
磁盘空间冗余数据多(需多层查询)空间优化(单层数据)
业务影响较小较大(可配合轮转合并降低影响)

六、最佳实践

  1. 避免写满MemStore

    • 调低 freeze_trigger_percentage(如40%)
    • 增加 minor_freeze_times 延迟合并
  2. 业务高峰管理

    • 手动转储释放内存:ALTER SYSTEM MINOR FREEZE
    • 合并安排在低谷期:major_freeze_duty_time='02:00'
  3. 轮转合并优化

    • 启用 enable_merge_by_turn
    • 设置合理的 zone_merge_order

完整配置示例:

-- 调整冻结阈值和转储次数
ALTER SYSTEM SET freeze_trigger_percentage=40;
ALTER SYSTEM SET minor_freeze_times=5;-- 设置每日合并时间
ALTER SYSTEM SET major_freeze_duty_time='02:00';

附:关键系统表

表名用途
__all_server_event_history自动转储记录
__all_rootservice_event_history手动转储/合并记录
__all_zone合并状态查询
gv$memstore租户MemStore使用情况

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词