首批通过分布式安全可靠测评,为关键业务系统打造
租户内存写满
更新时间:2026-04-10 11:58:00
租户内存(MemStore)写满多数情况下是由突发的批量导入操作导致的,应急的操作主要以开启写入限速以及调整转储阈值等手段。
应急处理流程
租户内存写满一般表现为写入失败,报错No memory or reach tenant memory limit 或者 Over tenant memory limits。应急策略的优先级选择一般从高到低分别为:
增加租户内存配置。建议直接在 OCP 执行租户内存扩容操作,详见 OCP 官网文档。命令行修改详见如下步骤:
执行以下 SQL 语句,确认当前租户使用的
unit_config。注意
多个副本可能使用了不同的
resource_pool,您需要分别做出调整。SELECT a.tenant_name,a.tenant_id,b.name unit_config,c.name pool_name,b.max_cpu,b.min_cpu FROM OCEANBASE.DBA_OB_TENANTS a, OCEANBASE.DBA_OB_UNIT_CONFIGS b, OCEANBASE.DBA_OB_RESOURCE_POOLS c WHERE a.tenant_id=c.tenant_id AND b.unit_config_id = c.unit_config_id ORDER BY a.tenant_id desc;执行生成的 SQL 语句。
注意
截止 OceanBase V3.2 版本,修改
resource unit配置仅 CPU、Memory 配置是实际生效的,其他 IO 参数例如磁盘、iops 等都暂时无效,默认即可。ALTER resource unit unit_config_name min_cpu = 2,max_cpu = 2,MEMORY_SIZE = '2G',max_iops = 10000,min_iops = 10000;
调高转储线程数,加快转储,让内存尽快释放。
转储前数据会大量占据内存,快速转储结束能释放被占用的内存,
compaction_high_thread_score是控制并行转储线程数,您可以通过调高该参数值来达到快速释放内存的目的。该参数默认值为0,表示只有一个线程数,修改该参数无需重启 OBServer 即刻生效。注意
该参数调大的代价为 CPU 使用率升高,请根据具体情况决定是否开启。
具体方法如下:使用
root用户登录集群的sys租户。ALTER SYSTEM SET compaction_high_thread_score=x;修改成功后,可以通过
SHOW PARAMETERS语句查看是否修改成功。SHOW PARAMETERS LIKE 'compaction_high_thread_score';当集群已经无法扩容租户总内存时,可调高租户 MemStore 的比例,临时扩大可写入内存,并且调低转储阈值,让转储更快发生。
OceanBase 数据库中,一个租户 Active MemStore 内存的使用量达到
freeze_trigger_percentage * memstore_limit(其中,memstore_limit = 租户内存 * memstore_limit_percentage)时,系统就会自动触发冻结(转储的前置动作),然后再调度转储。转储后,系统就会释放占用的 MemStore 内存。另一个相关的参数是
memstore_limit_percentage,也就是租户内存中可用于 MemStore 写入的比例,默认为 0,表示租户使用 MemStore 的内存占其总可用内存的百分比由系统进行自适应调整。该参数的取值范围为 [0, 100),修改该参数无需重启 OBServer 即刻生效。在应急场景下,可以调大
memstore_limit_percentage的同时,调低freeze_trigger_percentage,达到临时扩容和尽快转储释放的目的。具体方法如下:使用
root用户登录集群的sys租户。ALTER SYSTEM SET freeze_trigger_percentage=40; ALTER SYSTEM SET memstore_limit_percentage=70;开启写入限速,内存写入达到一定阈值 OB 会主动限制客户端导入速度。
writing_throttling_trigger_percentage是租户级参数,该参数是调整写入速度的阈值,当 MemStore 已使用的内存达到该阈值时,触发写入限速。该参数的默认值是 100,表示关闭写入限速机制。该参数的取值范围为[0, 100],修改该参数无需重启 OBServer 即刻生效。另一个参数writing_throttling_maximum_duration表示触发限速后,剩余内存最多支持多长时间的写入时间,默认为 2 小时,该项一般不做修改。ALTER SYSTEM SET writing_throttling_trigger_percentage = 80; ALTER SYSTEM SET writing_throttling_maximum_duration = '2h';应用侧降级批处理任务。
当用户内存写满时,您可以考虑在应用侧降级对应租户的批处理任务。