【DB吐槽大会】第58期 - PG 复杂JOIN优化器有巨大提升空间

简介: 大家好,这里是DB吐槽大会,第58期 - PG 复杂JOIN优化器有巨大提升空间

背景


1、产品的问题点

  • PG 复杂JOIN优化器有巨大提升空间

2、问题点背后涉及的技术原理

  • PostgreSQL 有两套JOIN顺序、JOIN方法的自动优化方法. (包括子查询提升后的JOIN).
  • 穷举.
  • 有2个问题, 1. 表越多耗时越长(穷举组合N的阶乘-1种), 2. 一次性生成执行计划, 然后执行, 这种方法随着JOIN层级越深, JOIN相匹配记录的评估会越来越不准确.
  • geqo, 类似图式算法(TSP)
  • geqo算出的JOIN顺序, 相对来说不是很准确.

3、这个问题将影响哪些行业以及业务场景

  • 偏数据分析的业务场景
  • ERP系统(例如odoo, sap. 或者企业自己写的ERP软件), 使用框架生成的SQL, 通常会有很多表的JOIN(见过几十个上百个表的JOIN).

4、会导致什么问题?

  • 无法高效率的得到最优的query plan. 原因是随着JOIN层级越深, JOIN相匹配记录的评估会越来越不准确.

5、业务上应该如何避免这个坑

  • 可以使用AQO优化器, 对于复杂query有一定提升.
  • 通过参数和SQL写法, 固定JOIN顺序
  • join_collapse_limit, from_collapse_limit
  • 使用HINT
  • 使用sr_plan, 篡改执行计划

6、业务上避免这个坑牺牲了什么, 会引入什么新的问题

  • 需要非常专业的DBA, 而且随着输入where条件的变化, 固定的执行计划并不一定符合所有条件.
  • 第三方的aqo插件, 无法保障其品质.

7、数据库未来产品迭代如何修复这个坑

  • 希望内核层面支持多表JOIN的动态优化执行计划, 而不是一次性生成执行计划, 然后按计划执行.
  • 希望可以支持动态优化: (复杂QUERY优化、机器学习、AP类查询动态根据上一步的实际执行统计信息(每个node结果集的柱状图、高频词、记录数等)调整下一步nodeplan)



相关文章
|
4月前
|
SQL 算法 数据库
SQL优化器原理 - Join重排
保证等价性:不同的Join顺序可能产生相同的结果集,但执行成本可能不同。因此,在重排Join顺序时,必须确保结果集的等价性。
|
4月前
|
SQL 算法 数据库
SQL优化器原理 - Join重排。
保证等价性:不同的Join顺序可能产生相同的结果集,但执行成本可能不同。因此,在重排Join顺序时,必须确保结果集的等价性。
|
SQL 算法 Cloud Native
数据库内核那些事|细说PolarDB优化器查询变换 - join消除篇
数据库的查询优化器是整个系统的"大脑",一条SQL语句执行是否高效在不同的优化决策下可能会产生几个数量级的性能差异,因此优化器也是数据库系统中最为核心的组件和竞争力之一。阿里云瑶池旗下的云原生数据库PolarDB MySQL版作为领先的云原生数据库,希望能够应对广泛用户场景、承接各类用户负载,助力企业数据业务持续在线、数据价值不断放大,因此对优化器能力的打磨是必须要做的工作之一。 本系列将从PolarDB for MySQL的查询变换能力开始,介绍我们在这个优化器方向上逐步积累的一些工作。
11418 0
|
关系型数据库 MySQL 分布式数据库
PolarDB for MySQL优化器查询变换系列 - join条件下推
本篇是PolarDB 优化器查询变换系列的第四篇,之前的文章请见:窗口函数解相关:https://ata.alibaba-inc.com/articles/194578IN-list变换:https://ata.alibaba-inc.com/articles/254779Join消除:https://ata.alibaba-inc.com/articles/252403引言在数据库的查询优化特性
232 0
PolarDB for MySQL优化器查询变换系列 - join条件下推
|
SQL Cloud Native 算法
PolarDB 优化器查询变换系列 - join消除
背景众所周知,数据库的查询优化器可以说是整个系统的"大脑",一条查询语句执行的是否高效,在不同的优化器决策下,可能会产生几个数量级的性能差异,因此优化器也是数据库系统中最为核心的组件和核心竞争力之一。对于各个商业数据库,其优化器通过常年积累下来的能力,是其最为核心的商业机密,而另一方面从现有的开源数据库来看,很可惜大多数产品的优化器还都十分初级,也包括老牌的MySQL/Post
218 0
|
SQL 分布式计算 算法
SQL优化器原理 - Join重排
这是ODPS有关SQL优化器原理的系列文章之一。我们会陆续推出SQL优化器有关优化规则和框架的其他文章。添加钉钉群“关系代数优化技术”(群号11719083)可以获取最新文章发布动态。 本文的目标是解释Join重排这个特性的基础概念和算法,如果想快速了解并在ODPS上使用这个特性,请直接跳到“总结”。 ## 简介 Join重排是经典的SQL优化问题。考虑3个表的自然连接 ```A
3018 0
|
SQL Oracle 关系型数据库
PostgreSQL JOIN limit 优化器 成本计算 改进 - mergejoin startup cost 优化
标签 PostgreSQL , join , limit , startup cost , cbo , 优化器改进 背景 PostgreSQL limit N的成本估算,是通过计算总成本A,以及估算得到的总记录数B得到: (N/B)*A 大概意思就是占比的方法计算 对于单表查询...
1226 0
|
SQL 关系型数据库 PostgreSQL
|
SQL 关系型数据库 索引
PgSQL · 源码分析 · PG 优化器中的pathkey与索引在排序时的使用
概要 SQL在PostgreSQL中的处理,是类似于流水线方式的处理,先后由: 词法、语法解析,生成解析树后,将其交给语义解析 语义解析,生成查询树,将其交给Planner Planner根据查询树,生成执行计划,交给执行器 执行器执行完成后返回结果 数据库优化器在生成执行计划的时候,优化器会考虑是否需要使用索引,而使用了索引之后,则会考虑如何利用索引已经排过序的特点,来优化相关的排序,比如ORDER BY / GROUP BY等。
1691 0
|
6月前
|
达摩院 开发者 容器
「达摩院MindOpt」优化形状切割问题(MILP)
在制造业,高效地利用材料不仅是节约成本的重要环节,也是可持续发展的关键因素。无论是在金属加工、家具制造还是纺织品生产中,原材料的有效利用都直接影响了整体效率和环境影响。
「达摩院MindOpt」优化形状切割问题(MILP)
下一篇
无影云桌面