Oracle的并行计算

| 分类 Database,Parallel  | 标签 database 

记录一下 Oracle 数据库中并行计算相关的东西。

1 理论和概念

  • 并行度 (Degree of parallelism, DOP): 并行计算中所使用的独立进程数。
  • DOP 的评估
    DOP 的值显然不是越大越好。启用并行后,任务划分,节点间的协作,数据同步等等都是消耗。如果待处理的数据量本身很小,则没有必要去起并行操作。数据库里面,由数据库引擎根据各种运算的成本自动对 DOP 进行评估。
  • 数据划分
    决定好了 DOP 之后,就需要对数据进行划分,并分配给各个进程。数据的划分基本上根据架构分为两大类。

    shared_nothing_everything.tiff

    • Shared Nothing 架构

      一般应用于海量并行处理 (Massively Parallel Processing, MPP) 中,数据通过一定 Hash 算法分布到集群中的不同节点上,节点间不共享任何数据。如

      该架构下,节点只能访问自己的数据,数据划分的算法在 MPP 初始化时就已经决定:数据处理单元的数量即是最小的 DOP。

    • Shared Everything 架构

      Oracle 采用的是 shared nothing 架构,该架构无需预先定义数据切分。所有数据对于所有的处理单元都可见,DOP 也因此与实际的数据存储解耦。

2 Oracle 的并行执行

Oracle 可以在无需人为干预的情况进行复杂任务的并行化执行,例如:数据加载,查询,DML, DDL 等。

2.1 SQL 语句的并行处理

Oracle 的 SQL 并行执行建立于几个基本概念之上。

2.1.1 Query Coordinator (QC) and Parallel Execution (PX) servers

  • QC 查询协调器
    指发起查询语句的那个会话,负责向 PX Server 分布任务,并执行少量的不能并行的任务。
  • PX server 并行执行服务器
    真正执行并行运算的节点。由于 Oracle 采用了 shared_nothing 架构, PX server 实际上是从一个 PX Server Pool 里面选取的,在该会话过程当中只服务于本会话。

两者之间以及他们和用户之间的关系如下图:

qc_px.png

2.1.2 生产者消费者模型

PX Servers 可以进一步分为两类:

  • 生产者 (Producer) 用来生成数据
  • 消费者 (Consumer) 用来消费数据

2.1.3 颗粒

颗粒 (granule) 是指访问数据是的最小的工作单元。

  • 块基颗粒
    Oracle 的最小工作单元是块,故又称为“块基颗粒”(block-based granules) 。块基颗粒是最细的粒度
  • 片基颗粒
    块基颗粒对应还有一种颗粒名为 “片基颗粒”(Partition-based granules) :一个 PX Server 负责处理单一分片上的所有数据。

当分片数大于 DOP 时, Oracle 引擎才会考虑使用片基颗粒,此过程用户无法干预。


上一篇     下一篇