---
title: "租户内存写满 - OceanBase 数据库 V4.5.0 | OceanBase 文档中心"
description: 租户内存写满 租户内存（MemStore）写满多数情况下是由突发的批量导入操作导致的，应急的操作主要以开启写入限速以及调整转储阈值等手段。 应急处理流程 租户内存写满一般表现为写入失败，报错 No memory or reach tenant memory limit （错误码 4013） 或者 Over tenan…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.5.0

# 租户内存写满

更新时间：2026-04-06 09:19:26

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.0/zh-CN/600.manage/1100.emergency-response/300.common-emergency-response/200.problems-caused-by-capacity-changes/400.full-tenant-memory.md)  

租户内存（MemStore）写满多数情况下是由突发的批量导入操作导致的，应急的操作主要以开启写入限速以及调整转储阈值等手段。

## 应急处理流程

租户内存写满一般表现为写入失败，报错 `No memory or reach tenant memory limit`（错误码 4013） 或者 `Over tenant memory limits` （错误码 4030）。应急策略的优先级选择一般从高到低分别为：

1. 增加租户内存配置。建议直接在 OCP 执行租户内存扩容操作，详见 [OCP 官网文档](https://www.oceanbase.com/docs/enterprise-oceanbase-ocp-cn-1000000000125587)。命令行修改详见如下步骤：

      1. 执行以下 SQL 语句，确认当前租户使用的 `unit_config`。

        #### 注意

        多个副本可能使用了不同的 `resource_pool`，您需要分别做出调整。

        ```sql
        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;

        ```
      2. 执行以下 SQL 语句。

        #### 注意

        截止 OceanBase V3.2 版本，修改 `resource unit` 配置仅 CPU、Memory 配置是实际生效的，其他 IO 参数例如磁盘、iops 等都暂时无效，默认即可。

        ```sql
        ALTER resource unit unit_config_name min_cpu = 2,max_cpu = 2,MEMORY_SIZE = '2G',max_iops = 10000,min_iops = 10000;

        ```
 2. 调高转储线程数，加快转储，让内存尽快释放。

   转储前数据会大量占据内存，快速转储结束能释放被占用的内存，`compaction_high_thread_score` 是控制并行转储线程数，您可以通过调高该参数值来达到快速释放内存的目的。该参数默认值为 `0`，表示只有一个线程数，修改该参数无需重启 OBServer 即刻生效。

   #### 注意

   该参数调大的代价为 CPU 使用率升高，请根据具体情况决定是否开启。

   具体方法如下：使用 `root` 用户登录集群的 `sys` 租户。

   ```sql
   ALTER SYSTEM SET compaction_high_thread_score=x;

   ```

   修改成功后，可以通过 `SHOW PARAMETERS` 语句查看是否修改成功。

   ```sql
   SHOW PARAMETERS LIKE 'compaction_high_thread_score';

   ```
 3. 当集群已经无法扩容租户总内存时，可调高租户 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`，达到临时扩容和尽快转储释放的目的。

   ```sql
   ALTER SYSTEM SET freeze_trigger_percentage=40;
   ALTER SYSTEM SET memstore_limit_percentage=70;

   ```
 4. 开启写入限速，内存写入达到一定阈值 OB 会主动限制客户端导入速度。

   `writing_throttling_trigger_percentage` 是租户级参数，该参数是调整写入速度的阈值，当 MemStore 已使用的内存达到该阈值时，触发写入限速。该参数的默认值是 100，表示关闭写入限速机制。该参数的取值范围为 `[0, 100]`，修改该参数无需重启 OBServer 即刻生效。另一个参数 `writing_throttling_maximum_duration` 表示触发限速后，剩余内存最多支持多长时间的写入时间，默认为 2 小时，该项一般不做修改。

   ```sql
   ALTER SYSTEM SET writing_throttling_trigger_percentage = 80;
   ALTER SYSTEM SET writing_throttling_maximum_duration = '2h';

   ```
 5. 应用侧降级批处理任务。

   当用户内存写满时，您可以考虑在应用侧降级对应租户的批处理任务。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
