虚拟化系统是否影响解释计划?



我在Postgresql上的解释计划有奇怪和不同的结果。Postgresql服务器安装在VMWare机器上,当对给定的SQL查询执行多个解释计划时,会返回不同的结果。在我看来,硬件虚拟化可能会向Postgresql服务器提供"错误"的信息,从而导致它返回"不正常的、有些随机的"成本测量值。我是对的,还是对这些令人惊讶和奇怪的结果有其他的解释?

无论如何,如果你知道任何有用的文档,我将非常感谢。

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

我们建议经常对活跃的生产数据库进行抽真空(至少每晚),以消除死行。在加上或之后在删除大量行时,发出一个对受影响的表执行VACUUM ANALYZE命令。这将更新系统编目包含所有最近更改的结果,并允许PostgreSQL查询规划器,在规划查询时做出更好的选择。

不建议常规使用FULL选项,但可能会在特殊情况下很有用。例如,当您删除或更新了表中的大部分行,并希望表也这样做物理收缩以占用更少的磁盘空间并允许更快的表扫描。VACUUM FULL通常比plain更能收缩桌面真空。

由于连续执行的成本不同,一个在VMWare下执行,另一个在没有数据库更改的情况下执行,我想说虚拟化有一些影响。我很确定一个虚拟机看起来会比直接硬件有更少的内存,但我没有办法测试,或者测试它对查询优化器的影响。

计划不受底层硬件的直接影响。它们是成本参数(例如,random_page_cost)、内存设置(例如,work_mem)和表统计的乘积。您应该能够轻松地验证两个实例之间的参数设置是否相同。(理想情况下,可以根据硬件特性调整这些参数,然后在不同的系统上得到不同的方案。)表统计信息依赖于表中的实际数据(您没有提到在两个实例中是否具有相同的数据)和收集统计信息时的一些随机元素。确保ANALYZE已运行。如果你还是不知道,就把计划贴出来。

最新更新