it编程 > 数据库 > PostgreSQL

2024 Postgres Conference 大会丨一文详解拓数派干货演讲精华内容

156人参与 2024-08-04 PostgreSQL

4月17日-19日,全球规模最大的 postgresql 会议之一——postgres conference 2024 在美国 san jose 隆重举行,本届大会包含 ops、dev、essentials 和 google cloud 四个 track,话题围绕 postgresql 内核、数据库管理与应用、用户实例与经验等主题展开,邀请了来自谷歌、aws、edb、yugabyte、dbeaver 等企业的资深讲师出席大会。拓数派凭借其强大的国际技术社区影响力,受邀作为会议赞助商参与本次盛会,并发表技术演讲。

在大会中,pieclouddb 技术专家 richard guo 作为新 postgresql contributor,受邀发表技术演讲《a high-level introduction to the query planner in postgresql》,结合 pieclouddb database 优化器打造经验,从开发者的角度阐述 postgresql 优化器的工作原理,并详细介绍查询树转换为计划树的过程。richard 的演讲得到了参会观众的积极反馈,并进行了深入的互动和沟通。

数据库管理系统(dbms)中,sql 查询处理是一个复杂且关键的过程。对于 postgresql,一条 sql 语句从接收到执行一共需要经过下面五个主要步骤:

对于同一个查询语句,一般可以由多种方式去执行,查询优化器作为数据库的重要组件,它的作用就是从每一种可能的执行方式中,找到代价最小的查询计划,并把它转换成可执行的计划树。

下面将着重介绍 postgresql 查询处理过程中的规划/优化阶段,这也是整个流程中最重要以及最复杂的阶段。该过程一般被分为四个阶段:预处理阶段,扫描/连接优化阶段,扫描/连接之外的优化阶段以及后处理阶段。

1. 预处理阶段

在预处理阶段的早期一般会通过简化常量表达式(函数、布尔、case 等)、内联简单的 sql 函数等方式,尽可能的简化查询。同时,还会通过把 in, exists 等类型的子查询转换为半连接、提升子查询以及把消除外连接(将其转换为内连接或反连接)等操作来简化连接树。

除了这些方法,在预处理阶段的后期还会采用多种优化方式,包括:

2. 扫描/连接优化阶段

扫描/连接优化阶段主要处理查询语句中 from 和 where 部分,同时也会考虑 order by 的信息。这一部分都是由代价来驱动的。

该阶段首先为基表确定扫描路径,估计扫描路径的代价,然后利用动态规划和遗传算法,搜索整个连接顺序空间,生成连接路径。而在搜索连接顺序空间时,还需要考虑到由外连接带来的连接顺序的限制。

在动态规划中,连接搜索会按照如下的过程进行:

然而这个过程的代价是非常高的,n 个表的连接,理论上有 n! 个不同的连接顺序,遍历所有可能的连接顺序是不现实的。因此通常会使用一些启发式办法,减少搜索空间,对于不存在连接条件的表,尽量不做连接;把一个大的问题,分解成多个子问题,从而降低复杂度。

3. 扫描/连接之外的优化阶段

在该阶段优化器会优先处理 group by、聚集、窗口函数和 distinct,再对集合(union/intersect/except)操作进行处理,最后再处理 order by。以上的每个步骤都会产生一个或多个路径,优化器会对这些路径基于代价进行筛选,并为筛选出的路径添加 lockrows,limit 和 modifytable 节点。

4. 后处理阶段

在这一阶段,优化器需要把代价最小的路径转换成计划树,并且调整计划树中的一些细节:

做完这一步,优化器就得到了完整的计划树,并可以将该计划树交予执行器去执行,最终得到查询结果。

作为立足中国的高科技创新企业,拓数派近年来通过代码贡献、讲师布道、会议赞助与参与、生态合作等多种形式,深耕于国际开源技术与生态体系。未来,拓数派将不断拓宽国际视野,积极融入全球科技创新的浪潮,扩大国际影响力,打造为国际化的技术驱动型企业。

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

6月22日 TiDB 地区交流活动(武汉站)开启报名啦!一起聊聊“传统vs分布式|分布式数据库 TiDB 的优势场景和产品发展”

08-04

备份恢复新体验!pgBackRest与IvorySQL的完美融合

08-04

国产数据库圈,为啥那么多水货?

08-04

瀚高研究院 | 7个维度!PostgreSQL生态展望:2024路向何方?

08-04

PostgreSQL 中的 JSON:彻底改变数据库中的数据灵活性

08-04

PostgreSQL16中的新增功能:双向逻辑复制

08-04

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论