PostgreSQL执行机制的初步学习
作为开源数据库的新手,近日有兴对比了Pg和MySQL的查询计划。
通过Pg源码目录下的src\backend\executor\README文件,加上一些简单调试,就能对Pg的执行机制产生一个初步印象;
而MySQL的代码可读性比Pg差了不少,可能还要花些时日去了解先。
原本想写一篇执行机制对比的文章,现在只能谈谈对Pg的体会,不足和错误之处敬请指正。
- Pg算是学院派的开源数据库代表产品,其基于关系代数的优化、操作符的实现看起来十分亲切。相较于MySQL扁平的计划,Pg的执行计划让人一目了然。
- Pg的执行计划静态只读,这是为了重用计划方便。在具体执行某计划时,会有一个包含只读计划指针 + 执行所需信息的State操作符树(对应Plan Trees and State Trees)。类似的表达式也包括Expr和ExprState。
- Pg的执行计划为操作符树,连接如Merge Join,Hash Join为二元操作符;分组、排序等为一元操作符;集合运算,水平分区表相关操作,相关子查询过滤等可能存在多个子节点。例如,每个相关子查询生成一个SubPlan挂载到过滤条件上,如果过滤条件有n个相关子查询那么就会在scan下方得到n个SubPlan,这一点倒是和Oracle类似(注:12c相关查询处理会更多地进行unnest,在子查询中加了分组才构造出来)。
- 操作符的执行是基于状态的,操作符之间用元组来传递数据。控制权由上而下,数据的传递由下而上。操作符对数据的处理以元组为单位,目前没有批量的优化。
- 操作符中可能涉及表达式计算(接口ExecMakeFunctionResultNoSets),如投影、过滤。根据表达式类型如整型比较、整型相加,会有不同的ExpreState对应。ExprState包含了整型加法或比较用的函数指针,也包含有操作数。 如int_col1 + int_col2,首先加载ExprState的两个操作数:从Tuple中的第n个字段获取值并存放到ExprState的参数中, 接下来使用ExprState的函数指针,结合两个参数进行加法运算并返回结果。
总结:
Pg的执行器代码逻辑很清晰,但是以tuple为单位的处理会使得CPU资源得不到充分利用;
表达式重用优化现在只看到了9.6引入的聚合OP重用;
PostgreSQL执行机制的初步学习的更多相关文章
- PostgreSQL的backuplabel file 初步学习
磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面:PostgreSQL内部结构与源代码研究索引页 回到顶级页面:PostgreSQL索引页 看代码: /* File path names ...
- 浏览器中js执行机制学习笔记
浏览器中js执行机制学习笔记 RiverSouthMan关注 0.0772019.05.15 20:56:37字数 872阅读 291 同步任务 当一个脚本第一次执行的时候,js引擎会解析这段代码,并 ...
- JS学习笔记:(三)JS执行机制
首先我们先明确一点:JavaScript是一门单线程语言.单线程也就是说同一时间只能执行一个任务,所有的任务都必须排队顺序执行.那么如果一个任务耗时很长,阻塞了其它任务的执行,就会给用户造成不友好的体 ...
- javascript执行机制
文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还不懂,可以揍我. 不论你是javascript新手还是老鸟,不论是面试求职,还是日常开发工作,我们经常会遇到这样的情况:给定的 ...
- 彻底弄懂 JavaScript 执行机制
本文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还不懂,可以揍我. 不论你是javascript新手还是老鸟,不论是面试求职,还是日常开发工作,我们经常会遇到这样的情况:给定 ...
- JavaScript 执行机制
一.宏任务与微任务 macro-task(宏任务):包括整体代码script,setTimeout,setInterval micro-task(微任务):Promise,process.nextTi ...
- 转载---JavaScript执行机制
很好的一篇文章,原地址 JavaScript执行机制 这一次,彻底弄懂 JavaScript 执行机制 本文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还不懂,可以揍我. 不 ...
- 【js】javaScript 执行机制
javascript 是一门单线程语言(按照语句一行一行的执行) let a = '1'; console.log(a); let b = '2'; console.log(b); 这样子正常执行是没 ...
- 这一次,彻底弄懂 JavaScript 执行机制
本文转自https://juejin.im/post/59e85eebf265da430d571f89#heading-4 本文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还 ...
随机推荐
- oracle 导出导入不含数据的空库
10g或之前,用exp导出,imp导入,带上rows=n参数 11g或以上,用expdp导出,impdp导入,带上CONTENT = METADATA_ONLY 参数 expdp带上此参数,不导出数据 ...
- css的白富美
1,CSS(Cascading Style Sheet)是用来装饰HTML的,当浏览器读到这样一个样式的时候,它就会按照这个文档进行格式化(渲染) 2,CSS的组成:选择器和声明,声明又包括属性和属性 ...
- MVC优缺点
1.通过把项目分成model view和controller,使得复杂项目更加容易维护. 2.没有使用view state和服务器表单控件,可以更方便的控制应用程序的行为 3.应用程序通过contro ...
- ios app抓包分析
1 使用rvictl工具 这是mac下的一条命令.ios usb连mac,然后创建虚拟网络接口. 2 使用wireshark抓包 wireshark可以抓这个虚拟网络接口上的数据包.
- c# 字节高低位
byte n = br.ReadByte(); ; // 高位 var l = n & 0x0f; // 低位
- vmware中鼠标在部分区域不能使用
https://blog.csdn.net/dreamengsoul/article/details/80439278 方法1:重装VMware tools; 方法2:使用增强型键盘鼠标: 方法3:检 ...
- YTU 2598: 编程题B-小平智斗自动售货机
2598: 编程题B-小平智斗自动售货机 时间限制: 1 Sec 内存限制: 128 MB 提交: 268 解决: 69 题目描述 LYH自动售货机在销售商品时,具有自动找钱功能.但是找零的最小单 ...
- YTU 1003: Redraiment的遭遇
1003: Redraiment的遭遇 时间限制: 1000 Sec 内存限制: 128 MB 提交: 198 解决: 71 题目描述 Redraiment的老家住在工业区,日耗电量非常大.是政府 ...
- linkerd——针对java的为微服务提供可靠性的proxy,服务发现重试LB等
Buoyant是一家云服务公司,宣布了Linkerd(发音为“linker-DEE”)的一周年纪念日,这是一个基于微服务的原生云应用程序的开源“服务网格”项目.诚如公告所述: 在20世纪90年代,TC ...
- 【转】Android性能优化之GPU过度绘制与图形渲染优化
标签: android / 优化 / 过度绘制 / 图形渲染优化 Android之GPU过度绘制与图形渲染优化 写在前面的话 本文主要对过度绘制和图形渲染做一个概念性的描述,和简单的优化措施. 如果你 ...