首批通过分布式安全可靠测评,为关键业务系统打造
大事务导致内存分配失败, 导致切主失败
更新时间:2025-05-28 02:06
问题描述
OceanBase 数据库中存在 2700w 行数据的大事务,在更新过程中遇到内存分配失败,导致切主。切主后一直无法上任。
适用版本
OceanBase 数据库 V3.x 版本。
问题原因
在 OceanBase 数据库发生大事务导致内存分配失败,从而触发切主,而切主的过程需要一定的时间来进行 leader_takeover 机制的遍历 callback。当大事务修改量过大,导致 leader_takeover 的遍历 callback 时间过长,超过Clog 模块的上任超时时间 (role_change_timeout) 10秒,导致上任失败,将重新进行上任流程,触发切主,进而导致分区切主的情况。
解决方法
解决方法
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库企业版 V3.1.2 BP8 Hotfix (oceanbase-3.1.2-20220329234820) 及之后版本、V3.2.1 BP1 Hotfix (oceanbase-3.2.1-20220426204550) 及之后版本。
应急解决方法
调大 Clog 模块的上任超时时间 role_change_timeout。
obclient> ALTER SYSTEM SET _ROLE_CHANGE_TIMEOUT = '30S';
说明
role_change_timeout 在 OceanBase 数据库 V3.x 版本中代表分区上任/卸任允许的最长时间, 即超过这个时间上任/卸任就会失败。关于该参数的更多详细信息, 请参见对应版本的 《参考指南》。