租户内存由租户创建 Unit 时,其 memory_size 的大小定义,memory_size 为用户租户的整体内存大小。
Unit 内存规格 = 业务租户 + meta 租户
Meta
Meta 租户的内存资源不支持共享,Meta 租户和用户租户的内存资源需要隔离。默认 Meta 租户占整体租户规格的 10%。为了保证 Meta 租户正常运行,Meta 租户内存资源规格最小为 512M,不设最大值。整体租户内存规格减去 Meta 租户内存规格即为用户租户的内存规格。整体租户规格最小值调整为 1G。下面举例说明:
- 租户规格大于等于 10G 时,Meta 租户和用户租户内存规格比例为 1:9。
- 租户规格大于等于 2G 时,Meta 租户的内存规格固定为 1G,剩余资源给用户租户。
- 租户规格大于等于 1G 并且小于 2G 时,Meta 租户固定分配 512 M,剩余资源给用户租户。
MemStore+SQL Work Area
不可动态伸缩内存相关的配置只有 memstore_limit_percentage 和 ob_sql_work_area_percentage,前者表示租户的 MemStore 部分最多占租户总内存上限的百分比,后者表示 SQL 阻塞算子工作区内存占用上限。
MEMSOTRE
在 V4.3.x 版本中,从 V4.3.0 版本开始,还支持通过租户级隐藏配置项 _memstore_limit_percentage 来配置租户 MemStore 占租户总内存的百分比,除了生效范围不同,其功能及默认值与集群级配置项 memstore_limit_percentage 均相同。在配置这两个配置项时,需要注意以下事项:
如果仅配置了 _memstore_limit_percentage 或 memstore_limit_percentage 中某一个配置项的值(非默认值),则以配置的值(非默认值)为准。
如果同时配置了租户级隐藏配置项
_memstore_limit_percentage(非默认值)和集群级配置项memstore_limit_percentage(非默认值)的值,则以_memstore_limit_percentage配置的值为准。如果两者均未配置,或均配置为默认值时,系统将采用以下自适应策略:
内存为 8G (真实 Memory)及以下规格的租户,其租户 Memstore 的配置比例为 40%。
内存为 8G 以上规格的租户,其租户 Memstore 的配置比例为 50%。
SQL Work Area
工作区内存,是指 SQL 排序等阻塞性算子使用的内存,通过租户系统变量 ob_sql_work_area_percentage 控制,默认值为 5%,即工作区内存 = 租户内存 * ob_sql_work_area_percentage(默认 5%)。
如果请求并发量较大,且每个请求占用的工作区内存比较多,可能出现工作区内存不足的报错,经常出现的场景有 union、sort、group by 等。上述问题如果出现,可以通过适当调大系统变量ob_sql_work_area_percentage来进行规避。
KVCache
可动态伸缩的 KVCache 会尽量使用除去不可动态伸缩后租户的全部内存,当租户内存满时,会优先从 KVCache 中淘汰未被引用的内存来使用。KVCache主要用于缓存热点数据(Row Cache)、表结构元数据(Schema Cache)等内容,属于共享资源池的一部分。
KVCache 一般不需要配置,特殊场景下可以通过参数控制各种 Cache 的优先级,优先级高的 Cache 比优先级低的 Cache 更容易被保留在 Cache 中。
在不手动调整的情况下,这部分是 MemStore 分配后剩下的其他内存中的动态分配区域。
其他辅助模块
一些额外的模块可能会占用预留给用户租户内存的较小部分:
- Plan Cache:SQL 执行计划缓存。
- Transaction Audit:事务审计日志。
- Election 等与选举机制相关的模块。
- Rpc 模块:网络通信所用内存(占租户总内存的比例通过
rpc_memory_limit_percentage控制)。
适用版本
oceanbase 数据库 V4.x 版本