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

OceanBase执行计划缓存内存管理

2023-03-12
772

执行 EXPLAIN 语句看到的执行计划是预估的,在 Plan Cache 中缓存的执行计划才是真实的。Plan Cache 可以避免硬解析 SQL 语句,当同样的 SQL 请求到 OceanBase 数据库时,会从缓存中直接获取该语句对应的计划,然后直接执行该计划,从而达到加快请求处理的效果。

与 Plan Cache 相关的配置项

配置项说明
plan_cache_evict_interval该配置项用于设置检查执行计划是否需要淘汰的间隔时间,默认值为 1s。

与 Plan Cache 相关的系统变量

系统变量说明
ob_plan_cache_percentage该系统变量用于设置计划缓存可使用内存占租户内存的百分比。计划缓存最多可使用内存(内存上限绝对值)= 租户内存上限 * ob_plan_cache_percentage/100,默认值为 5。
ob_plan_cache_evict_high_percentage该系统变量用于设置触发计划缓存淘汰的内存大小占内存上限绝对值的百分比。触发计划缓存淘汰的内存大小(淘汰计划的高水位线) = 内存上限绝对值 * ob_plan_cache_evict_high_percentage/100,默认值为 90。
ob_plan_cache_evict_low_percentage该系统变量用于设置停止淘汰计划缓存的内存大小占内存上限绝对值的百分比。停止淘汰计划缓存的内存大小(淘汰计划的低水位线)= 内存上限绝对值 * ob_plan_cache_evict_low_percentage/100,默认值为 50。

举例来讲,假如一个租户内存大小为 10 GB, ob_plan_cache_percentage 的值为 10, ob_plan_cache_evict_high_percentage 的值为 90, ob_plan_cache_evict_low_percentage 的值为 50。则:

  • 计划缓存内存上限绝对值 = 10 GB * 10 / 100 = 1 GB

  • 淘汰计划的高水位线 = 1 GB * 90 / 100 = 0.9 GB

  • 淘汰计划的低水位线 = 1 GB * 50 / 100 = 0.5 GB

当该租户在某个 OBServer 上的计划缓存使用超过 0.9 GB 时,会触发淘汰,且优先淘汰最久未执行的计划。当淘汰到使用内存只有 0.5 GB 时,则停止淘汰。如果淘汰速度没有新计划生成的速度快,则当计划缓存使用内存达到内存上限绝对值 1 GB 时,将不再往计划缓存中添加新计划,直到淘汰后使用的内存小于 1 GB 时才会再次添加新计划到计划缓存中。

最后修改时间:2023-03-12 16:55:47
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论