现在的位置: 首页 > 综合 > 正文

Oracle 并行DDL简介

2013年12月07日 ⁄ 综合 ⁄ 共 6656字 ⁄ 字号 评论关闭

Oracle DDL的概念

DataDefinition Language(DDL),数据定义语言DDL用来创建数据库中的各种对象——表、视图、索引、同义词、聚簇等如:CREATETABLE/VIEW/INDEX/SYN/CLUSTER,主要的命令有CREATE、ALTER、DROP等。DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用。

 

Oracle并行DDL

DBA的大规模批操作适合并行化,因为其可以有丰富的计算资源与系统资源可以使用。类似于创建数据表,创建索引,重组索引,等等的DDL操作完全科院并发的实现已重分利用机器的硬件资源。Oracle基于这个思想实现了并行DDL

Oracle中可以并发执行的DDL包括:

CreateIndex:多个并行执行服务器可以扫描表,对数据排序,并把有序的段写出到索引结构。

CreateTable AS Select:执行select的查询可以使用并行查询来执行,表加载本身可以并行完成。

AlterIndex Rebuild:索引结构可以并行重建。

AlterTable Move:表可以并行移动

AlterTable Split|Coalesce Partition:单个表分区可以并行的分解或者合并。

AlterIndex Split Partition:索引分区可以并行的分解。其中前4个操作还适用于单个的表/索引分区。Create Table用于有索引结构的表的时候也可以并行的执行。

 

使用Oracle并行DDL

CREATEINDEX,ALTERINDEX ... REBUILD,ALTERINDEX ... MOVE PARTITION,ALTERINDEX ...SPLITPARTITION以及CREATETABLE ... AS SELECT等可以进行并行执行的DDL语句在有PARALLEL(DEGREEN)子句或者ALTERSESSIONFORCEPARALLEL DDL 声明(比PARALLEL子句优先级低)的时候会被Oracle并行执行,并行度为N,即启用4个执行服务器去并行的执行该DDL操作中的子操作。如果没有显示的指定并行度,Oralce会根据任务量和实际的机器情况(可用处理器数目,用户情况,内存情况等)去制定并行度是多少,可用是完全不并行(串行),也可以启用可用处理器数目的并行执行服务器去执行。

 

 

下面是一个实际使用的例子:

create index id1 on dept(num) PARALLEL(DEGREE 2);

其执行计划为:

PLAN_TABLE_OUTPUT                                                                                                                                                                                                                                                                                           
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------                  
Plan hash value: 2990439629                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                            
----------------------------------------------------------------------------------------------------------------------------------                                                                                                                                                                          
| Id  | Operation                | Name     | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |    TQ  |IN-OUT| PQ Distrib |                                                                                                                                                                          
----------------------------------------------------------------------------------------------------------------------------------                                                                                                                                                                          
|   0 | CREATE INDEX STATEMENT   |          |   328 |  4264 |     2   (0)| 00:00:01 |       |       |        |      |            |                                                                                                                                                                          
|   1 |  PX COORDINATOR          |          |       |       |            |          |       |       |        |      |            |                                                                                                                                                                          
|   2 |   PX SEND QC (ORDER)     | :TQ10001 |   328 |  4264 |            |          |       |       |  Q1,01 | P->S | QC (ORDER) |                                                                                                                                                                          
|   3 |    INDEX BUILD NON UNIQUE| ID1      |       |       |            |          |       |       |  Q1,01 | PCWP |            |                                                                                                                                                                          
|   4 |     SORT CREATE INDEX    |          |   328 |  4264 |            |          |       |       |  Q1,01 | PCWP |            |                                                                                                                                                                          
|   5 |      PX RECEIVE          |          |   328 |  4264 |     2   (0)| 00:00:01 |       |       |  Q1,01 | PCWP |            |                                                                                                                                                                          
|   6 |       PX SEND RANGE      | :TQ10000 |   328 |  4264 |     2   (0)| 00:00:01 |       |       |  Q1,00 | P->P | RANGE      |                                                                                                                                                                          
|   7 |        PX BLOCK ITERATOR |          |   328 |  4264 |     2   (0)| 00:00:01 |     1 |     4 |  Q1,00 | PCWC |            |                                                                                                                                                                          
|   8 |         TABLE ACCESS FULL| DEPT     |   328 |  4264 |     2   (0)| 00:00:01 |     1 |     4 |  Q1,00 | PCWP |            |                                                                                                                                                                          
----------------------------------------------------------------------------------------------------------------------------------              
                                                                                                         
                  Note                                                                                                                                                                                                                                                                                                        
----                                                                                                                                                                                                                                                            
                              
   - estimated index size: 65536  bytes                                                                                                                                                                                                                                                                     

19 rows selected

 

从例子中可用看出创建表这个操作被分割成了若干个子操作,其中的子操作8先执行,他是被4个执行服务器并行的执行,然后子操作7 6 5 4 3 2也都是被并行执行的,最终执行子操作1,总协调进程收集所有并行执行的结果反馈给用户查看。

抱歉!评论已关闭.