OceanBase 数据库把租户内部的内存总体上分为以下两个部分:
不可动态伸缩的内存
可动态伸缩的内存——KVCache
其中,不可动态伸缩的内存主要给保存数据库增量更新的 MemStore 使用,可动态伸缩的内存主要由 KVCache 进行管理。
除此之外,还有很多内存组件,包括 Plan Cache(执行计划缓存)、SQL Area(SQL 执行期内存)、选举动作等,都要占用一定量的内存。您可以通过查询 oceanbase.GV$OB_MEMORY 视图来获取所有内存组件的使用情况。
不可动态伸缩的内存管理
目前与不可动态伸缩内存相关的配置只有只有 memstore_limit_percentage 和 ob_sql_work_area_percentage,前者表示租户的 MemStore 部分最多占租户总内存上限的百分比,默认值为租户 memory_size 的 50%,后者表示 sql 执行过程中的内存占用,默认为租户 memory_size 的 5%。
租户的写入或者更新会增加 MemStore 的内存使用,当租户的 MemStore 部分内存到达上限以后,后续的写入或者更新操作将会被拒绝。
OceanBase 数据库会根据 MemStore 的内存使用比例决定何时进行转储或者合并释放 MemStore 的内存,该比例由配置项 freeze_trigger_percentage 控制,表示当 MemStore 内存占用到达其上限的百分比后就进行冻结(转储和合并的前置动作),默认值为租户 MemStore 内存上限的 70%,即租户 memory_size 的 35%。
说明
memory_size是租户可使用的内存,您可以根据业务实际情况配置。
可动态伸缩的内存管理
可动态伸缩的 KVCache 会尽量使用除去不可动态伸缩后租户的全部内存,当租户内存满时,会优先从 KVCache 中淘汰未被引用的内存来使用。
OceanBase 数据库将绝大多数的 KV 格式的缓存统一在了 KVCache 中进行管理,KVCache 支持动态伸缩、不同类型 Cache 的优先级控制以及智能的淘汰机制。
KVCache 一般不需要配置,特殊场景下可以通过参数控制各种 Cache 的优先级,优先级高的 Cache 比优先级低的 Cache 更容易被保留在 Cache 中。
用于控制不同类型 Cache 的优先级的参数如下表所示。参数值越大表示优先级越高。
| 参数 | 含义 |
|---|---|
| tablet_ls_cache_priority | tablet_ls_cache 在缓存系统中的优先级。 |
| index_block_cache_priority | index_block_cache 在缓存系统中的优先级。 |
| user_block_cache_priority | user_block_cache 在缓存系统中的优先级。 |
| user_row_cache_priority | user_row_cache 在缓存系统中的优先级。 |
| bf_cache_priority | Bloom Filter 在缓存系统中的优先级。 |
| fuse_row_cache_priority | fuse_row_cache 在缓存系统中的优先级。 |
| opt_table_stat_cache_priority | opt_table_stat_cache 在缓存系统中的优先级。 |
KVCache 中不同类型的 Cache 的信息可以通过查询 oceanbase.GV$OB_KVCACHE 视图获得。其中 sys 租户和普通租户的重要组成部分略有不同:
sys 租户上的 Cache 种类
类别 说明 schema_cache 存放用户的 Schema 信息,用于提供 SQL 及系统正常运行所依赖的数据库对象的元信息。 tablet_table_cache 缓存 Tablet 中 schema version 和 table id 的对应关系。 vtable_cache 缓存 Table 的 Location 信息。 index_block_cache 缓存微块的 Index,加速微块数据的访问。 user_block_cache 缓存微块数据,由于微块可能通过压缩算法进行压缩,为了提升查询性能,缓存的是解压后的微块数据。 user_row_cache 缓存某一个 Table 中的热点行数据。 bf_cache 缓存为点查结果为空且超过一定次数的宏块建立的 Bloomfilter ,用于提高空查询的过滤效率。 fuse_row_cache 缓存行的快照点数据,用于提高点查询性能,并且可以避免因转储、合并导致的缓存失效问题。 opt_table_stat_cache 缓存某一个分区的统计信息,例如行数、宏块数、微块数等。 opt_column_stat_cache 缓存分区中某一列的统计信息,例如空值数、非空值数、最大值、最小值等。 普通租户上的 Cache 种类
类别 说明 tablet_ls_cache 缓存 Tablet 所属的 Logstream 的 id 。 index_block_cache 缓存微块的 Index,加速微块数据的访问。 user_block_cache 缓存微块数据,由于微块可能通过压缩算法进行压缩,为了提升查询性能,缓存的是解压后的微块数据。 user_row_cache 缓存某一个 Table 中的热点行数据。 bf_cache 缓存为点查结果为空且超过一定次数的宏块建立的 Bloomfilter ,用于提高空查询的过滤效率。 fuse_row_cache 缓存行的快照点数据,用于提高点查询性能,并且可以避免因转储、合并导致的缓存失效问题。 opt_table_stat_cache 缓存某一个分区的统计信息,例如行数、宏块数、微块数等。 opt_column_stat_cache 缓存分区中某一列的统计信息,例如空值数、非空值数、最大值、最小值等。




