代码之家  ›  专栏  ›  技术社区  ›  Lei Chi

全局缓存greenplum查询计划?

  •  0
  • Lei Chi  · 技术社区  · 6 年前

    我想使用计划缓存节省计划成本,因为OCRA/Legacy优化器将花费数百万秒。

    我认为greenplum缓存查询计划在会话级,当会话结束或其他会话无法共享分析的计划时。更重要的是,我们不能一直打开会话,因为gp系统在TCP连接断开之前不会释放资源。

    大多数主要的数据库缓存计划在首次运行之后,并使用corss连接。

    那么,有没有打开查询计划缓存交叉连接器的开关?我可以在一个会话中看到,客户端计时统计数据与计划员给出的“总时间”不匹配吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Brendan Stephens    6 年前

    Postgres也可以缓存计划,这是基于每个会话的,一旦会话结束,缓存的计划就会被丢弃。这在优化/分析时可能很棘手,但通常不那么重要,除非您正在执行的查询非常复杂和/或有很多重复的查询。

    文档很好地解释了这些细节。我们可以查询pg_prepared_语句来查看缓存的内容。请注意,它在会话之间不可用,并且仅对当前会话可见。

    当用户使用Greenplum数据库启动会话并发出查询时,系统会在每个段上创建工作进程组或“帮派”来完成工作。工作完成后,段工作进程将被销毁,但gp_cached_segworkers_threshold参数设置的缓存号除外。

    较低的设置可以节省段主机上的系统资源,但较高的设置可以提高希望连续发出许多复杂查询的高级用户的性能。

    另请参阅gp_max_local_distributed_cache。

    显然,缓存越多,可用于其他连接和查询的内存就越少。如果你只是托管几个运行并发查询的超级用户,也许没什么大不了的。。。但您可能需要相应地调整您的gp-vmem-u-protect-u限制。

    澄清: 段资源在gp_vmem_idle_resource_超时后释放。 只有主会话将保留,直到TCP连接断开。