适用版本
OceanBase 数据库 V2.2.77 BP11 和 V3.1.2 BP19 之后的版本,之前的版本不支持该参数。
问题现象
当事务上下文选举换任消耗时间超过 clog 模块上任超时时间的时候,如果触发切主,则可能导致分区无主的情况。
问题原因
当事务的修改量过大的时候,事务上下文的 leader_takeover 将花费较多时间(遍历 callback 花费较多时间),而 clog 模块的上任超时时间为 10 秒。如果上下文选举换任消耗时间超过 10 秒,Root Service 会认为上任失败,将重新进行上任流程。如此循环,涉及事务的副本将持续无主,此问题在重启 observer 进程后依然会复现,无法消除。 因此,当事务修改量超过一定阈值的时候,如果触发切主,则可能导致分区无主的情况。此时,需要调大 clog 模块的上任超时时间,否则将有可能在大事务悬挂后引起副本无主。
解决方法
调大 clog 模块上任超时时间参数,从默认 10 秒调到足够大,直到选主成功。
超时时间参数:
OceanBase 数据库 V3.2.3 BP8、V3.2.4 BP1 及以上版本为
_role_change_timeout。OceanBase 数据库 V3.2.3 BP8、V3.2.4 BP1 之前版本为
role_change_timeout。