特性概述
功能定义
在数据库系统中,对于PBE场景以及启用cursor_sharing功能时,会话级和全局共享级计划缓存机制可能面临内存溢出风险。具体而言,若客户端频繁提交差异化SQL语句,会导致内核持续生成新的计划缓存条目。在缺乏有效清理机制的情况下,这些缓存条目会在内存中无限制累积,最终可能引发内存资源耗尽、系统不可用的严重故障。
为解决此隐患,GaussDB创新性地实现了双维度内存管控体系:
- 会话级管控:通过动态阈值限制单个会话的私有计划缓存内存占比。
- 全局共享级管控:采用LRU-K算法对全局共享缓存实施准入控制,优先保留高频执行的优质计划。
该机制通过双重约束(会话内存上限+全局淘汰策略),确保计划缓存始终运行在预设的安全内存范围内。当缓存总量达到预警阈值时,系统自动触发异步清理线程,按策略淘汰低效缓存条目,在保障查询性能的同时,有效规避内存溢出风险。
用户场景
在数据库运行过程中,若因计划缓存条目持续累积且缺乏有效清理机制,导致动态内存资源耗尽,将引发业务请求无法正常执行、数据库服务中断等严重故障。通过本特性的内存管控机制,系统能够对计划缓存实施精准的内存配额管理,确保关键业务始终获得必要的内存资源支持,从而有效维持核心服务可用性,显著增强系统健壮性。
规格约束
- 在计划缓存淘汰触发计划重建过程中,系统将维持当前GUC参数配置状态,不会回滚或重置历史参数设置。若重建操作执行前发生GUC参数变更,新生成的执行计划将基于最新参数环境构建,此机制可能导致淘汰前后的计划在执行策略或资源分配层面产生差异。该行为属于系统设计的预期特性,而非功能异常。
- 对于会话级计划缓存管控,仅对预编译(PREPARED)语句声明的查询框架生成的执行计划以及GUC参数cursor_sharing参数化功能触发的缓存计划占用的内存进行管控,其他内存不做管控(临时表空间内存分配、会话级排序区/哈希区、用户连接上下文内存以及其他非计划缓存相关内存对象等)。
- 对于全局共享计划缓存(Global Plan Cache, GPC)实施全维度内存管控,支持管理所有纳入GPC的缓存计划内存分配以及支持多维度计划类型内存的管控,包括PREPARED语句创建的预编译执行计划以及通过GUC参数cursor_sharing参数化生成的通用查询计划。