Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Optimization 传统查询优化器与关键查询优化器_Optimization_Greenplum - Fatal编程技术网

Optimization 传统查询优化器与关键查询优化器

Optimization 传统查询优化器与关键查询优化器,optimization,greenplum,Optimization,Greenplum,嗨,我是Greenplum数据库的新手。我知道默认优化器是遗留的,要激活关键优化器,我们应该启用“set optimizer=on” 我想了解以下内容: 这两个优化器的主要区别是什么 对于什么类型的查询,我们应该启用Pivotal optimizer以获得更好的性能 表演 阿努拉格 将optimizer设置为“on”可以对原始Postgres optimizer进行一系列修改,以更好地处理超大分区表上的查询、子查询和CTE SQL(带语句)等问题。还有其他正在进行的修改,以使优化器代码在所有类型

嗨,我是Greenplum数据库的新手。我知道默认优化器是遗留的,要激活关键优化器,我们应该启用“set optimizer=on”

我想了解以下内容:

  • 这两个优化器的主要区别是什么
  • 对于什么类型的查询,我们应该启用Pivotal optimizer以获得更好的性能 表演
  • 阿努拉格

    将optimizer设置为“on”可以对原始Postgres optimizer进行一系列修改,以更好地处理超大分区表上的查询、子查询和CTE SQL(带语句)等问题。还有其他正在进行的修改,以使优化器代码在所有类型的SQL查询上更加模块化和高效,但这正是最初关注的焦点所在。我不在优化器团队(这里是关键数据现场工程师)中,因此可能还有其他人可以在这个主题上给你比我更深入的答案

    至于哪些查询受益最大,最好的答案是:“视情况而定”:。通常,使用optimizer=on可以更高效、更快地处理非常大的分区表查询。与CTE查询和包含子选择的查询相同。我还看到一些更标准的星型模式类型查询在optimizer=on时运行得更快

    在这两种情况下,优化器都依赖于数据库中非常好的统计数据,因此您需要确保在大负载或删除/截断后运行ANALYZE

    最好的选择是在打开和关闭优化器的情况下运行查询并计时(可以在会话级别进行设置)。数据集的大小和数据库模式结构可能会在打开或关闭优化器的情况下显示出更快的时间,所以我会选择最适合您的特定情况的设置。我与很多Greenplum客户合作。有些优化器设置为默认打开,有些设置为关闭。找到最适合大部分查询的默认设置,并在查询运行“缓慢”的情况下使用相反的设置,看看是否获得更好的结果

    我希望这能回答你的问题


    Jim

    对于分区表,请确保运行analyze root partition,因为PQO使用根分区上的统计信息,而不是像Planner那样使用叶分区