首批通过分布式安全可靠测评,为关键业务系统打造
OceanBase 数据库如何处理一台 OBServer 上多个重叠的冻结动作
更新时间:2026-06-15 09:16
本文主要介绍 OceanBase 数据库处理一台 OBServer 上多个重叠冻结动作的机制。
在 OceanBase 数据库中,您可以通过以下几种方式触发冻结操作。
通过
ALTER SYSTEM MAJOR FREEZE手动发起。当增量数据写到超过
freeze_trigger_percentage设置的阈值时,系统自动发起。控制 OceanBase 数据库冻结阈值的配置项为
freeze_trigger_percentage,默认为 70,表示当内存使用超过 70% 时会触发冻结。注意
增量数据写到超过
freeze_trigger_percentage触发minor freeze,且次数超过minor_freeze_times,系统会自动触发major freeze。通过设置配置项
major_freeze_duty_time定时发起。
有关该以上配置项的详细信息,请参见 OceanBase 数据库《参考指南》中的 系统配置项 章节。
在某些场景下,可能会出现在一台 OBServer 上发起多个重叠的冻结动作。例如,系统里已经运行了手动发起的冻结,在一定时间内,增量数据超过了阈值,又触发了新的冻结请求,两个冻结请求会重叠。针对同一 OBServer 上多个重叠的冻结动作,OceanBase 数据库会遵循以下处理规则。
多个手动发起的冻结 ,只有完成了上一个版本的 merge 完成才能继续执行后续版本的冻结。
先达到
freeze_trigger_percentage设置的阈值发起冻结,再手动发起冻结时,会在完成了上一个版本的 merge 完成才能继续执行后续版本的冻结。先达到
freeze_trigger_percentage设置的阈值发起冻结,再根据 duty_time 的设置定时发起冻结时,只会执行第一个冻结。第二个冻结会失败,并返回以下错误信息。fail as 'cannot do major freeze triggered by cluster self, out of version limit'先手动发起冻结,再根据 duty_time 的设置定时发起冻结时,只会执行第一个冻结。第二个冻结会失败,并返回以下错误信息。
fail as 'cannot do major freeze triggered by cluster self, out of version limit'先触发由 duty_time 定时发起的冻结,再手动发起冻结时,再根据 duty_time 的设置定时发起冻结完成后,再执行手动发起的冻结。
注意
无论由 duty_time 定时发起的冻结前后是否有冻结请求,在
rootservices.log中都会记录major freeze has already been launched, no need to do again。