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

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

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

# 租户内存写满

更新时间：2025-03-25 14:26:40

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.1.0/zh-CN/700.reference/200.administrator-guide/700.management/500.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` 或者 `Over tenant memory limits`。应急策略的优先级选择一般从高到低分别为：

1. 增加租户内存配置。建议直接在 OCP 执行租户内存扩容操作，详见 OCP 使用指南。命令行修改详见如下步骤：

      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中一个租户的 MemTable 内存的使用量达到配置项 freeze_trigger_percentage 所限制使用的百分比时，就会自动触发转储，转储后会释放占用的内存。该参数默认值为 70 ，表示当 memstore 使用率超过70%，就会触发转储。

   另一个相关的参数是 `memstore_limit_percentage`，也就是租户内存中可用于 memstore 写入的比例，默认为 50%，意为租户使用 memstore 的内存占其总可用内存50%。例如一个内存配置为 10GB 的租户，memstore 可写入部分为 5G。该参数的取值范围为[1, 99]，修改该参数无需重启 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) 咨询热线
