CMU 15-445/645-Note6-执行篇-Query Execution
0.写在前面
based on CMU 15-445/645 2020fall, Lecture #12~Lecture #13.
1:执行模型(PROCESSING MODEL)
DBMS 的执行模型定义了系统执行查询计划(query plan)。每一个query plan都要实现一个next函数和一个init函数,对于next函数每次调用时,返回一个元组或空标记(如果没有更多元组)。
主要有三种方法:
Approach #1: Iterator Model
Approach #2: Materialization Model
Approach #3: Vectorized / Batch Model
我们一一介绍。
1.1 Iterator Model
每次处理一个tuple。
这里的evalPred(t)就等价于 S.value > 100。
1.2 Materialization Model
一次处理所有输入,然后一次获得它的所有输出。
Materialization Model更适合 OLTP ,因为仅查询一次访问少量元组。
→ 降低执行/协调开销。
→ 更少的函数调用。
不适合大容量的 OLAP 查询中间结果。
1.3 Vectorized / Batch Model
每次处理一个Batch。
适合OLAP ,因为它大大减少了每个操作的调用次数。
2:Scan
对于Scan如何进行优化?
2.1 Zone Map
保存该页数据的一些统计信息,比如min\max\avg\cnt等,以便更快的判断。但是这带来了额外的写的开销。
如果我们执行左边的查询,通过Zone Map知道,最大值为400,我们就不需要访问这个Page。
2.2 Late Materialization
在列存储时,可以在一开始只读用于筛选的attribute。最后才通过筛选后record ID(offset)来读整个tuple/投影的attribute,推迟实例化的过程。
2.3 index scan
如果有多个Index,可以使用bitmap来做多个Index的谓词判断。把集合结合起来最后根据另一个查询条件获得结果
3:并发模型
并行DBMS:
1)资源在物理上靠近
2)资源之间可以高速互通
3)资源交互是非常廉价和可靠的
分布式DBMS:
1)各种资源之间可以离得很远
2)资源之间较慢速的互连进行通信
3)通信成本和问题不容忽视。(也就是很大)
3.1 Process Per Worker
流程如下:
1)你的应用程序想要和数据库进行交互。
2)通知Dispatcher。Dispatcher会fork一个子进程(也就是产生一个worker)来执行这个任务。
3)Dispatcher会告诉应用程序你直接和worker进行交互就可。
4)随后worker访问数据库,worker将得到的结果传回应用程序。
优点与缺点:
它的调度依赖于OS调度器,并且多进程之前需要通过shared memory进行数据共享,单个worker的失败不会引起系统的崩溃。
3.2 Process Pool
此模型和上面的模型的区别是不再是由Dispatcher管理进程,而是通过一个Woker Pool,任务会挂配到进程池中的空闲进程中执行。而且数据的返回需要通过Dispatcher返回给用户。
3.3 Thread per DBMS Worker
DBMS实现自己的调度。由于线程的切换代价更低,而且可以共享堆栈,所以线程成了代替进程的好选择。此时,每个DBMS只包含一个进程,和许许多多线程。
4:Execution Parallelism
4.1 Inter-Query
通过允许多条查询同时进行来提高整体的性能。
它会提升整体表现,但是会影响事务的隔离性。
4.2 Intra-Query
1)Intra-operator Parallelism (Horizontal):将数据拆分为多个子集,在子集中并行的执行operator,最后通过exchange operator合并数据或者重新对合并的结果分片。
上述例子:
1)首先A的所有worker和B的所有worker完成Hash join的基本操作
2)然后新的4个worker进行探测操作把结果汇入 根节点的Exchange得到结果
2)Inter-operator Parallelism (Vertical):以流水线的方式执行operator。即operator不需要等前一步operator执行完成,而是形成一个流水线。其对于传统关系型语句并不友好,因为Join,Aggregate等操作是需要scan所有的数据后才能执行。
3)Bushy Parallelism:
5: I/O Parallelism
如果磁盘始终是主要瓶颈,则使用其他进程/线程并行执行查询将无法提高性能。因此,我们需要一种方法将数据库拆分为多个存储设备。
5.1 MULTI-DISK PARALLELISM(多磁盘并行)
利用多块磁盘提升I/O速度,比如RAID。
5.2 Database Partitioning(数据库分区)
将数据库分为多个segment,分开存储,这种方案在分布式数据库中更常见。
具体切分的方案有两种:
1)Vertical Partitioning(按列切分):将表的属性存储在单独的位置。
2)Horizontal Partitioning(按行切分):根据某些分区键将表的元组划分为不相交的段。有不同的方法来决定如何分区(例如,散列,范围或谓词分区)。
参考:
https://zhuanlan.zhihu.com/p/374807916
https://www.jianshu.com/p/ce3b526d982f
https://www.cnblogs.com/JayL-zxl/p/14497016.html
CMU 15-445/645-Note6-执行篇-Query Execution相关推荐
- 2021年秋季版 CMU数据库15-445/645 Note1~4
2021年秋季版 CMU数据库15-445/645 Note翻译 NOTE 这也就是说这并不是一门教你如何使用数据库去构建应用程序.网站或者其他东西课,也不是一门教你如何去管理和部署数据库的课. 我们 ...
- 执行sc query mysql,sc delete mysql没有反应
管理员运行dos窗口执行sc query mysql,sc delete mysql,没有反应 这是你dos窗口打开错了,如下运行dos窗口即可正常运行(没有搜索框需要先打开搜索框) 参考:https ...
- 第二篇:个案管理师之执行篇-台湾最佳医院信息化及管理实践
曾志仁原著,袁永福编辑整理 前言 很荣幸能向各位医疗行业的同仁介绍台湾医院的一些管理经验和实践.客观的讲,台湾更好的继承和保留了中华民族传统文化,同时台湾深受美国和日本的影响,这样台湾文化是中西方文化 ...
- Morsel-Driven Parallelism: 一种NUMA感知的并行Query Execution框架
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可. 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权. 引言 一段时间前看到OSAPP中p ...
- Query execution was interrupted
MYSQL Error Error number: 1317; Symbol: ER_QUERY_INTERRUPTED; SQLSTATE: 70100Message: Query executio ...
- Adaptive Query Execution: Speeding Up Spark SQL at Runtime
This is a joint engineering effort between the Databricks Apache Spark engineering team - Wenchen Fa ...
- 手把手带你阅读Mybatis源码(二)执行篇
点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 前言 上一篇文章提到了MyBatis是如何构建配置类的,也说了MyBatis在运行过程中主 ...
- JVM执行篇:使用HSDIS插件分析JVM代码执行细节--转
http://www.kuqin.com/java/20111031/314144.html 在<Java虚拟机规范>之中,详细描述了虚拟机指令集中每条指令的执行过程.执行前后对操作数栈. ...
- Elasticsearch搜索引擎第十篇-Query DSL详解
文章目录 DSL介绍 Match all query 全文查询 match query match phrase query match phrase prefix query multi match ...
最新文章
- jQuery 3教程(三):jQuery集合
- mysql查询出去年某月_Mysql 查询某年,某季度,某月,某天搜索方法总结
- ORA-01855: AM/A.M. or PM/P.M. required问题排查与解析
- vim 寄存器中的 ^@,^M,^J
- 因为我想在博客园长呆,所以给博客园提一些改进建议
- 读书笔记:《时间投资法》之二
- 备份网站服务器文件路径,网站数据自动备份方法
- php用栈遍历目录和文件,php如何遍历目录,php非递归算法遍历目录的例子
- java搜索引擎: lucene学习笔记 3
- 多旅行商问题(Multiple Traveling Salesman Problem, MTSP):单仓库多旅行商问题及多仓库多旅行商问题(含动态视频)
- 如何解决上传到github上的图片显示不出来的问题
- mysql索引填充因子_处理索引碎片,填充因子(FILLFACTOR)
- 低版本MAC如何升级系统
- GIS功能区类型识别
- linux网络接口是什么,网络接口是什么?What Is A Network Interface?--用Enki学Linux系列(1)...
- php volist中作判断,ThinkPHP模板中判断volist循环的最后一条记录的验证方法
- display、visibility和opactity的区别
- 建造者模式-JAVA代码实现
- 扫雷游戏9*9(详细到具体每一步)
- 全球及中国氮化铝(AlN)模板行业运行态势及投资战略分析报告2021-2028年
热门文章
- 小微企业背后的scrm有何神秘?
- Linux中什么命令显示vi缩写,Linux命令(八)——vi编辑器的使用
- JS详解 | 对象 事件 节点 | 系统性学习 | 无知的我费曼笔记
- 请问有什么控件可以方便的实现呢
- 硬核知识大全 作为程序员你不得不了解
- 有没有测试游戏天赋的软件,测测你的电竞天赋-测测你的电竞天赋有多高小游戏v1.0...
- Milking Cows【转帖】
- 淘宝海量数据产品的技术架构
- 一对老耗子,每个月都生一对小耗子。小耗子长3个月,第四个开始变成老耗子开始生! 假如都不死,那么请问24个月后有多少只耗子?...
- yum错误:Cannot retrieve repository metadata (repomd.xml) for repository解决方法