暂无图片
暂无图片
8
暂无图片
暂无图片
暂无图片

OceanBase租户内部内存管理

2023-03-11
421

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_prioritytablet_ls_cache 在缓存系统中的优先级。
index_block_cache_priorityindex_block_cache 在缓存系统中的优先级。
user_block_cache_priorityuser_block_cache 在缓存系统中的优先级。
user_row_cache_priorityuser_row_cache 在缓存系统中的优先级。
bf_cache_priorityBloom Filter 在缓存系统中的优先级。
fuse_row_cache_priorityfuse_row_cache 在缓存系统中的优先级。
opt_table_stat_cache_priorityopt_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缓存分区中某一列的统计信息,例如空值数、非空值数、最大值、最小值等。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论