Oracle 迁移到 OceanBase4.2,使用 OMS 进行迁移。迁移完成后,业务写入高峰期出现以下问题:
1、写入延迟从 5ms 飙升到 200ms
2、OBProxy 报 OB_TENANT_OUT_OF_MEMORY
3、查 GV$OB_MEMSTORE发现 MemStore 使用率 92%
如何处理?
加内存
1、先查看当前租户资源配置,如果太低可以考虑快速扩容租户内存,让业务恢复
2、手动强制触发转储
ALTER SYSTEM MINOR FREEZE TENANT = ‘[租户名]’;
执行后可通过以下 SQL 观察内存释放情况(等待 10-30 秒)
SELECT tenant_id, active_memstore_used, total_memstore_size,
(active_memstore_used / total_memstore_size) * 100 as used_pct
FROM GV$OB_MEMSTORE WHERE tenant_id = [租户ID];
3、调整参数,加速后续自动转储,将 freeze_trigger_percentage 调低,同时适当调高 memstore 占比上限。
ALTER SYSTEM SET freeze_trigger_percentage = 20 TENANT = ‘[租户名]’;
ALTER SYSTEM SET memstore_limit_percentage = 70 TENANT = ‘[租户名]’;
注意:memstore_limit_percentage 必须大于 freeze_trigger_percentage。
4、排查写入来源,确认是否有异常大事务或 OMS 残留写入
4.1 检查是否仍有迁移任务在持续写入(确认 OMS 增量同步是否已结束)。
4.2 查找并确认长事务(超过 60 秒的事务):
SELECT tenant_id, trans_id, state, elapsed_time, scheduler_addr
FROM GV$OB_TRANSACTION_PARTICIPANTS
WHERE state = ‘ACTIVE’ AND elapsed_time > 60000000;
若确认是异常事务,可 KILL(谨慎操作):KILL SESSION [session_id];
5、开启写入限速功能
建议将触发阈值设为 80(必须大于freeze_trigger_percentage)。
ALTER SYSTEM SET writing_throttling_trigger_percentage = 80 TENANT = ‘[租户名]’;
6、若 CPU 充裕,调高转储并行线程数,加快内存释放速度
ALTER SYSTEM SET compaction_high_thread_score = 4 TENANT = ‘[租户名]’;
注意:该值一般设置为 CPU 核数的 1/4 到 1/2,不宜过大。
感谢回复
感谢
转移积分 社区禁止 积分还会取消
感谢分享1
感谢感谢