【 使用环境 】生产环境
【 OB or 其他组件 】oceanbase
【 使用版本 】4.2.1-8BP
【问题描述】
如图,业务租户在凌晨2点开始进行合并。磁盘使用量从70%增加到90%.
请教下,磁盘是否会因为合并被写满,然后合并失败。
还是合并使用磁盘到一定量会停止继续写,而是分不同表合并一次后,释放磁盘空间,再继续其他表的合并。
这种情况是否需要扩容数据盘
【 使用环境 】生产环境
【 OB or 其他组件 】oceanbase
【 使用版本 】4.2.1-8BP
【问题描述】
如图,业务租户在凌晨2点开始进行合并。磁盘使用量从70%增加到90%.
请教下,磁盘是否会因为合并被写满,然后合并失败。
还是合并使用磁盘到一定量会停止继续写,而是分不同表合并一次后,释放磁盘空间,再继续其他表的合并。
这种情况是否需要扩容数据盘
磁盘临时增加是合理的,单个节点如果涨到95%会暂停任务,届时会导致卡合并。建议尽快扩容一下
SELECT * FROM __ALL_ZONE WHERE INFO LIKE ‘%IDLE%’;
SELECT svr_ip,svr_port,total_size/1024/1024/1024 AS total, free_size/1024/1024/1024 AS free,(total_size-free_size)/1024/1024/1024 as used
FROM __all_virtual_disk_stat;
Frozen MemTable 内存需要等到转储或合并结束后,才会被清空并重新使用,可能导致有限的空闲 MemStore在写入量大的场景被写满。
可以通过查询 GV$OB_MEMSTORE
视图查看内存使用情况
SELECT * FROM GV$OB_MEMSTORE;
memstore_limit:指memstore能够使用的内存上限;
MEMSTORE_USED:指memstore占用的内存空间;
ACTIVE_SPAN: 指活跃memtable所占用的内存空间;
FREEZE_TRIGGER: 指memstore冻结阈值;
当ACTIVE_SPAN超过FREEZE_TRIGGER后,便会触发冻结,冻结完成后ACTIVE_SPAN便会降低,并会触发转储,转储完成后,内存得到释放,则MEMSTORE_USED会降低。如果长时间不转储,或者内存释放较慢,当MEMSTORE_USED超过memstore_limit时便发生了内存爆。
可以通过配置freeze_trigger_percentage
降低触发内存清空百分比。freeze_trigger_percentage
用于设置触发全局冻结的租户内存使用的阈值,默认为 20,取值范围为 1 ~ 99,有关该配置项的详细信息参考此文档
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001052389
这是否意味着,ob需要额外冗余20%的存储空间,用于合并时期的空间伸缩
合并导致的空间伸缩程度不同集群需要的大小也不同,可能需要根据不同集群业务来进行判断。最好还是多留余点空间
是的,要留一些 buffer。 OB 数据盘的实际使用空间曲线并不是直线上涨,而是锯齿状有上扬有下挫,长期观察会随着业务数据增长而增长。留多少需要基于已有使用空间曲线判断。每个场景不一样。每个场景的数据全量、数据变化累计量不一样。
90% 已经很危险了。如果哪天哪个业务来个大批量数据更新,或者大表的 offline ddl,合并时空间可能会爆掉。
原设置合并时间为凌晨2点。 这个时间点存在大量的统计任务在执行。占用的cpu比较多。导致合并可用cpu较少,整个合并时间拉长,需要2个小时才能完成合并。而且所使用的磁盘达到20%-30%。
将合并时间改为晚上10点后,这个时间基本是每天业务请求最少的时间段。合并半小时就完成了。所使用的的磁盘仅10%左右。