我想使用计划缓存来节省计划者的成本,因为OCRA /旧版优化程序将花费数百万秒。
当会话结束或其他会话无法共享所分析的计划时,我认为在会话级别使用greenplum缓存查询计划。更重要的是,我们无法使会话始终保持打开状态,因为gp系统在断开TCP连接之前不会释放资源。
最主要的数据库缓存计划在首次运行后,并使用该连接。
那么,是否有任何开关可以打开查询计划缓存交叉连接器?我可以在会话中看到客户端计时统计信息与计划者提供的“总时间”不匹配吗?
答案 0 :(得分:1)
Postgres也可以缓存计划,这是基于每个会话的,一旦会话结束,缓存的计划就会被丢弃。优化/分析这可能很棘手,但通常重要性不高,除非您要执行的查询真的很复杂和/或有很多重复的查询。
文档很好地详细解释了这些内容。我们可以查询pg_prepared_statements来查看缓存了什么。请注意,该功能在所有会话中均不可用,并且仅对当前会话可见。
当用户开始与Greenplum数据库的会话并发出查询时,系统会在每个网段上创建工作进程的组或“帮派”来进行工作。工作完成后,除由gp_cached_segworkers_threshold参数设置的缓存编号外,段工作进程被销毁。
较低的设置可以节省段主机上的系统资源,但是较高的设置可以提高想要连续发出许多复杂查询的高级用户的性能。
另请参见gp_max_local_distributed_cache。
显然,缓存越多,用于其他连接和查询的内存就越少。如果您仅托管一些运行并发查询的高级用户,也许就没什么大不了的,但是您可能需要相应地调整gp_vmem_protect_limit。
为澄清起见: 段资源在gp_vmem_idle_resource_timeout之后释放。 只有主会话会保留,直到TCP连接断开为止。