虚拟化系统会影响解释计划吗?

时间:2011-07-08 14:41:40

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

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

无论如何,如果您知道,我会感谢任何有用的文档。

2 个答案:

答案 0 :(得分:1)

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

  

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

     

建议不要将FULL选项用于日常使用,但可能是   在特殊情况下有用。一个例子是当你删除或   更新表中的大多数行并希望表格为   物理缩小以占用更少的磁盘空间并允许更快的表   扫描。 VACUUM FULL通常会比平面收缩更多   VACUUM会。

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

答案 1 :(得分:0)

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

相关问题