您好我是Greenplum数据库的新手。我知道默认优化器是遗留的并且为了激活Pivotal优化器,我们应该启用" set optimizer = on"。
我想了解以下内容:
答案 0 :(得分:1)
Anuraag。
将优化程序设置为" on"允许对原始Postgres优化器进行一组修改,以更好地处理诸如非常大的分区表,子查询和CTE SQL(WITH语句)上的查询之类的事情。还有其他正在进行的修改,以使优化器代码在所有类型的SQL查询上更加模块化和更高效,但这是最初的重点。我不是优化器团队(Pivotal Data Field工程师),因此可能有其他人可以为您提供更多关于此主题的深入答案。
至于哪些查询最有益,最好的答案是:"它取决于" :)。通常,使用optimizer = on时,可以更有效,更快地处理非常大的分区表查询。与CTE查询和带有子选择的查询相同。我还看到一些更标准的星型模式类型查询在optimizer = on下运行得更快。
在任何一种情况下,优化器都依赖于数据库中非常好的统计信息,因此您需要确保在大负载或删除/截断后运行ANALYZE。
您最好的选择是使用优化器打开和关闭查询(可以在会话级别设置)。数据集的大小和数据库模式结构通常可以显示优化器打开或关闭的更快时间,因此我会选择最适合您特定情况的设置。我和许多Greenplum客户合作。有些优化器设置为默认值,有些设置为关闭。找到最适合大量查询的默认设置,并在查询运行的情况下使用相反的设置"慢慢地"看看你是否得到了更好的结果。
我希望这能回答你的问题。
吉姆
答案 1 :(得分:0)
对于分区表,请确保运行分析根分区,因为PQO使用根分区上的统计信息而不是Planner等叶子分区。