---
title: "租户内部内存管理 | OceanBase 文档中心"
description: 租户内部内存管理 OceanBase 数据库把租户内部的内存总体上分为以下两个部分： 不可动态伸缩的内存 MemStore 可动态伸缩的内存 KVCache 其中，不可动态伸缩的内存主要给保存数据库增量更新的 MemStore 使用，可动态伸缩的内存主要由 KVCache（含 row_cache、schema_cac…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

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

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

# 租户内部内存管理

更新时间：2023-07-18 17:25:59

OceanBase 数据库把租户内部的内存总体上分为以下两个部分：

- 不可动态伸缩的内存 MemStore
 - 可动态伸缩的内存 KVCache

其中，不可动态伸缩的内存主要给保存数据库增量更新的 MemStore 使用，可动态伸缩的内存主要由 KVCache（含 row_cache、schema_cache、clog_cache 等）进行管理。可动态伸缩的 KVCache 会尽量使用除去不可动态伸缩后租户的全部内存。

除此之外，还有很多内存组件，包括 Plan Cache（执行计划缓存）、SQL Area（SQL 执行期内存）、选举动作等，都要占用一定量的内存。您可以通过查询 `__all_virtual_memory_info` 来获取所有内存组件的使用情况。

![1](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V3.2.3/zh-CN/2.user-guide/5.basic-database-management/6.memory-management-1/memory.png)

## 不可动态伸缩的内存管理

目前与不可动态伸缩内存相关的配置只有 `memstore_limit_percentage` ，它表示租户的 MemStore 部分最多占租户总内存上限的百分比，默认值为租户 MaxMemory 的 50%。

租户的写入或者更新会增加 MemStore 的内存使用，当租户的 MemStore 部分内存到达上限以后，后续的写入或者更新操作将会被拒绝。

OceanBase 数据库会根据 MemStore 的内存使用比例决定何时进行转储或者合并释放 MemStore 的内存，该比例由配置项 `freeze_trigger_percentage` 控制，表示当 MemStore 内存占用到达其上限的百分比后就进行冻结（转储和合并的前置动作），默认值为租户 MemStore 内存上限的 70%，即租户 MaxMemory 的 35%。

> **说明**
>
>  
>
> MaxMemory 和 MinMemory 是租户可使用内存的上下限，您可根据业务实际情况配置。

## 可动态伸缩的内存管理

可动态伸缩的内存主要部分是 KVCache。OceanBase 数据库将绝大多数的 KV 格式的缓存统一在了 KVCache 中进行管理，KVCache 支持动态伸缩、不同 KV 的优先级控制以及智能的淘汰机制。

KVCache 一般不需要配置，特殊场景下可以通过参数控制各种 KV 的优先级，优先级高的 KV 类比优先级低的 KV 类更容易被保留在 Cache 中。

用于控制 KV 优先级的参数如下表所示。参数值越大表示优先级越高。

| 参数 | 含义 |
| --- | --- |
| fuse_row_cache_priority | 融合行缓存在缓存系统中的优先级。 |
| location_cache_priority | 位置缓存在系统缓存服务中的优先级。 |
| clog_cache_priority | 事务日志占用缓存的优先级。 |
| index_clog_cache_priority | 事务日志索引在缓存系统中的优先级。 |
| user_tab_col_stat_cache_priority | 统计数据缓存在缓存系统中的优先级。 |
| index_cache_priority | 索引在缓存系统中的优先级。 |
| index_info_block_cache_priority | 块索引在缓存系统中的优先级。 |
| user_block_cache_priority | 数据块缓存在缓存系统中的优先级。 |
| user_row_cache_priority | 基线数据行缓存在缓存系统中的优先级。 |
| bf_cache_priority | Bloom Filter 的缓存优先级。 |

KVCache 中子 Cache 的信息可以通过查询 `__all_virtual_kvcache_info` 参数获得。其中 sys 和普通租户的重要组成部分略有不同：

- sys 租户上的 Cache 种类

  | 类别 | 说明 |
  | --- | --- |
  | schema_cache | 存放用户的 Schema 信息，用于提供 SQL 及系统正常运行所依赖的数据库对象的元信息。 |
  | location_cache | 存放分区的 location 信息，通过查询它可以知道一个 Partition 分布在哪些 OBServer 上。 |
  | block_index_cache | 缓存微块的 Index，加速微块数据的访问。 |
  | user_block_cache | 缓存微块数据，由于微块可能通过压缩算法进行压缩，为了提升查询性能，缓存的是解压后的微块数据。 |
  | fuse_row_cache | 缓存行的快照点数据，用于提高点查询性能，并且可以避免因转储、合并导致的缓存失效问题。 |
  | index_clog_cache | 缓存 ilog 文件的内容，用于减小读取 ilog 文件的开销。 |
  | user_tab_col_stat_cache | 用户表列统计信息缓存，用于 SQL 计算代价。 |
  | user_table_stat_cache | 用户表统计信息缓存，用于 SQL 计算代价。 |
 - 普通租户上的 Cache 种类

  | 类别 | 说明 |
  | --- | --- |
  | user_block_cache | 缓存微块数据，由于微块可能通过压缩算法进行压缩，为了提升查询性能，缓存的是解压后的微块数据。 |
  | block_index_cache | 缓存微块的 Index，加速微块数据的访问。 |
  | fuse_row_cache | 缓存行的快照点数据，用于提高点查询性能，并且可以避免因转储、合并导致的缓存失效问题。 |

 上一篇 下一篇 ![有帮助](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) 咨询热线
