【问题标题】:Do Virtualized systems effect Explain Plans?虚拟化系统会影响解释计划吗?
【发布时间】:2011-07-08 14:41:39
【问题描述】:

对于 Postgresql 的解释计划,我得到了奇怪且不同的结果。 Postgresql 服务器安装在 VMWare 机器上,当为给定的 SQL 查询执行多个解释计划时,会返回不同的结果。在我看来,硬件虚拟化可能会向 Postgresql 服务器提供“错误”信息,以便它返回“异常且有些随机”的成本测量。对于这些令人惊讶和奇怪的结果,我是对的还是有其他解释?

无论如何,如果您知道的话,我将不胜感激任何有用的文档。

【问题讨论】:

  • 有什么方法可以捕获explain analyze 随着时间推移的输出?
  • 对不起,你是什么意思?你的意思是有这些输出吗?我在 VM 中执行时实际上有这种行为,但在“正常”环境中没有。
  • 他的意思是让你归档 EXPLAIN ANALYZE 输出,以便我们进行比较。
  • 您能解释一下为什么您认为操作系统级别的成本会发生变化吗?与基于不断变化的数据库的内容和大小进行成本估算相反?
  • @fche - 我同意,这就是答案。数据在变化,可能需要 VACUUM。

标签: database postgresql virtualization vmware sql-execution-plan


【解决方案1】:

VACUUM 应该是数据库操作的常规部分。不过,这可能不是问题的根源。

我们建议经常清理活动的生产数据库 (至少每晚),以删除死行。添加后或 删除大量行,最好发出 受影响表的 VACUUM ANALYZE 命令。这将更新 系统目录与所有最近更改的结果,并允许 PostgreSQL 查询规划器,以便在规划查询时做出更好的选择。

不建议将 FULL 选项用于日常使用,但可能会 在特殊情况下很有用。例如,当您删除或 更新了表中的大部分行并希望表 物理缩小以占用更少的磁盘空间并允许更快的表 扫描。 VACUUM FULL 通常会比普通的更缩小表格 VACUUM 会。

由于连续执行的成本不同,一种在 VMWare 下,另一种在没有数据库更改的情况下,我会说虚拟化正在产生一些影响。我很确定虚拟机的 RAM 似乎比直接硬件少,但我现在没有办法测试它,或者测试它对查询优化器的影响。

【讨论】:

  • 所有连续的执行都是VMWare系统执行的。这是奇怪的行为:连续执行,数据库没有变化会返回不同的成本。我知道如果在执行之间进行了更改(更新、插入、更改...操作),可能需要 VACUUM 来帮助规划者制定更好的计划,但事实并非如此。
【解决方案2】:

计划不受底层硬件的直接影响。它们是成本参数(例如,random_page_cost)、内存设置(例如,work_mem)和表统计信息的产物。您应该能够轻松验证两个实例之间的参数设置是否相同。 (理想情况是根据硬件特性对这些参数进行调整,然后在不同的系统上得到不同的方案。)表的统计取决于表中的实际数据(你没有提到你是否有相同的数据)两个实例)和收集统计信息时的一些随机元素。确保 ANALYZE 已运行。如果您仍然一无所知,请发布计划。

【讨论】:

    猜你喜欢
    • 2015-02-08
    • 1970-01-01
    • 2016-12-19
    • 2011-02-22
    • 1970-01-01
    • 2012-06-17
    • 2019-08-12
    • 1970-01-01
    • 2011-08-01
    相关资源
    最近更新 更多