Oracle与并行性
并行化操作能力是巨型数据库(Very
Large
Database,简称VLDB)最重要的特性之一。带有多个CPU的数据库服务器,也被称作SMP,目前是大多数数据库服务器的标准配置。当性能需求以
及数据量不断的增长,更加需要使用多处理器和多磁盘来减少完成给定任务所需的时间。通过运行实时应用集群,Oracle即可支持单SMP服务器中的并行,
还可以支持多个节点间的并行。以并行方式执行一个SQL语句将消耗更多的机器资源——CPU,内存和磁盘I/O——但是可以缩短整个任务的完成时间。
并行操作以一种比较线性的方式影响着执行一个给定任务所需要的内存数量和CPU资源。每个并行执行进程都有一个PGA(Program
Global Area,程序全局区),它需要占用一定的内存来完成工作。每个并行执行进程会占用自己的CPU时间片,但是很多并行进程都可以减少磁盘I/O的时间,磁盘I/O往往是瓶颈最容易产生的地方。
Oracle数据库中存在两种可能的并行类型:
块-范围(block-range)并行
有数据库块的范围驱动。
基于分区的并行
由操作中涉及的一定数量的分区或子分区驱动。
下面几节将描述这两种类型的并行。
块-范围并行
1994年,Oracle
7.1引入了动态并行化表扫描和各种基于扫描的函数的能力。这种类型的并行是基于块范围(block-range)的概念,Oracle服务器将了解每个
表中包含了一组数据块,而每个数据块涵盖了一个指定范围的数据。Oracle
7通过动态的把一个表分解成几块来实现块-范围并行,分解得到每一个块就是一个数据块的范围,然后以并行的方式用多进程来处理这些分解的块。Oracle
的块-范围并行的实现是独一无二的,因为它不要求对表进行物理分区。
有了这种类型的并行,发出SQL语句的客户会话将透
明地成为并行执行协调器,它将动态的确定块范围并把它们分配给一组并行执行(PE)进程。一旦PE进程完成了一个分配的块范围,它就返回给协调器以便请求
下一步的工作。不是所有的I/O都以相同的速率发生,因此一些PE进程可能比另一些PE进程处理更多的数据块。“stealing
work”的概念允许所有的进程充分参与各项任务,从而最大限度的利用主机资源