CMU15445 Lecture 12 & 13 Query Execution

Query Plan

?multiple way指的是可以按照单一tuple的粒度往上emit,或者是按照batch的tuple的粒度往上emit,或者是整个要求的数据集合的粒度往上emit

Processing Models

Processing Models定义了query plan的执行从什么方向读取以及算子(operator)之间传递什么样的数据。
model有两种调用算子的方式(函数调用的方向)

  • 自顶向下:较常用
  • 自下而上:能够更好的控制管道中的寄存器或缓存?

Processing Model

Iterator Model(又叫火山模型)

每个operator实现一个Next()函数:

  • 每次调用该函数,算子返回一个tuple或是null标记
  • 父operator实现一个循环去调用其子operator的Next()以获取tuple并处理他们,也就是emit,以返回到祖先operator
    对于join算子,首先调用outer table的每一个tuple去生成hash table,然后是调用inner table中的每个tuple去生成join成的tuple,之后便可以emit join之后的tuple了

Materialization Model

直觉上的DBMS执行query plan的model
该model的执行过程大体是:

  • 每次调用一个operator,该operator以数组的形式返回给父级operator所有的结果tuple,
  • 适合OLTP的数据库,因为这种数据库主要执行点查询
  • 但是不是OLAP的数据库,因为这种数据库一般会有大量的中间结果,也就是一个operator传递的数据量巨大

Vectorization Model

与Iterator Model类似,:

  • 每个operator实现一个Next()函数,每次调用该函数,不同的是,每次返回一组tuple,而不是一个tuple
  • 一组具体的大小与软硬件相关
    适合OLAP的数据库,并且可以利用CPU的SIMD指令(Single Instruction Multiple Data)

Access Methods

Access Methods指的是DBMS读表的方式:

  • 基于index读表
    • multiple index(Bitmap Scan)是 index scan的扩展?
  • 线性扫描
    ?

Sequential Scan

基本的Sequential Scan就是全表扫描

基本的优化:

  • 预取
  • 对于线性扫描的数据,不放到缓存池中
  • 并行取数据,比如用两个cursor在表的首尾扫描
  • Heap Clustering: Tuples are stored in the heap pages using an order specified by a clustering index.
    tuples以聚簇index指定的方式存在heap page中

Zone Maps

  • 该方法首先给每个page统计aggregation的信息,以此决定需不需要将该page读入内存
  • 此方法的缺点是需要维护Zone Map

Late Materialization

适合于DSM(列存储:Decomposition Storage Model)存储tuple,不适合行存储的tuple,N-ary Storage Model (NSM)?
注意这里并不是index,这里传递的是offset

Index Scan

MULTI-INDEX SCAN

就是取多个index,根据谓词,取结果的交集或并集

Modification Queries

修改数据库的Operator需要满足一些条件:

  • Insert,如果存在unique约束,那么不能插重复的值
  • Insert,Update,delete也需要更新对应index

    对于下面的这个操作,必须要keep track of previously seen tuples不然此处Andy的工资会被加两次100

Expression Evaluation

DBMS将WHERE子句表示一个表达式树
但是对于下面这种expression会存在执行效低的问题,因为需要多次计算? + 1?
?1 + 1

并行Query Plan

query plan in parallel的好处:
TCO?应该就是花销

Parallel vs Distributed Databases

区别:

Process Model

DBMS的process model还定义了,如何使得系统能够处理来自多用户应用的并发请求

Process per DBMS Worker

  • 如果每个worker是一个process,那么它们之间的协同合作需要依赖于OS的调度
  • 如果worker之间需要交换数据,那么为它们开辟一段共享内存,其中存放global data structure
  • 一个worker出问题了,并不会使得整个系统崩溃

Process Pool

把一个Process Pool作为worker的好处是啥?

Thread per Worker

由于pthread的大行其道,Thread per Worker得以流行,postgresql任然使用processe per worker
优势:

  • context切换开销更小
  • 由于在同一个process中,所以thread之间不用管理共享内存
  • 但是这并不意味着intra - query parallelism,也就是说query之间是并发的,query内部不是并发

调度

DBMS比OS更懂数据库query plan的执行任务的调度

Inter-Query Parallelism and Intra-Query parallelism

区别:

  • Inter-Query Parallelism:如果是query之间需要write,那么便涉及concurrent control
  • Intra-Query parallelism,这二者有什么具体例子吗?

Intra-Query parallelism

以一种consumer/producer的范式工作

  • Intra-Operator Parallelism (Horizontal)


  • Inter-Operator Parallelism (Vertical)
    运用缓冲的管道并行
  • Bushy Parallelism
    Inter-Operator Parallelism(Horizontal)与Inter-Operator Parallelism (Vertical)的结合

I/O Parallelism

为什么会更糟?因为随机的存取对与disk storage不友好

Multi-Disk Parallelism

这个是配置OS/硬件,对于DBMS是透明的

Partitioning

如何切开数据库

Database Partitioning

按照database的粒度切开

Logical Partitioning

把table切开,分别放到多个disk,数据库的划分需要处理好shared log file

posted @ 2022-03-05 16:06  抿了抿嘴丶  阅读(157)  评论(0)    收藏  举报