oracle parallel

文章来自:http://jingyan.baidu.com/article/f3ad7d0ffb9e1109c2345b58.html

Oracle数据库的并行操作特性,其本质上就是强行榨取除数据库服务器空闲资源(主要是CPU资源),对一些高负荷大数据量数据进行分治处理。并行操作是一种非确定性的优化策略,在选择的时候需要小心对待。目前,使用并行操作特性的主要有下面几个方面:

Parallel Query:并行查询,使用多个操作系统级别的Server Process来同时完成一个SQL查询;Parallel DML:并行DML操作。类似于Parallel Query。当要对大数据量表进行DML操作,如insert、update和delete的时候,可以考虑使用;Parallel DDL:并行DDL操作。如进行大容量数据表构建、索引rebuild等操作;Parallel Recovery,并行恢复。当数据库实例崩溃重新启动,或者进行存储介质恢复的时候,可以启动并行恢复技术。从而达到减少恢复时间的目的;Procedural Parallel,过程代码并行化。对我们编写的代码片段、存储过程或者函数,可以实现执行的并行化,从而加快执行效率;1、并行查询Parallel QueryOracle数据库的并行查询是比较基础的技术,也是OLAP和Oracle Data Warehouse经常使用的一种并行技术。同本系列前面一直强调的要素相同,在确定使用并行技术之前,要确定软硬件的一些先决条件:任务task必要条件。备选进行并行操作的任务task必须是一个大任务作业,比如,长时间的查询。任务时间通常可以以分钟、小时进行计数。只有这样的任务和需要,才值得让我们冒险使用并行操作方案;资源闲置条件。只有在数据库服务器资源存在闲置的时候,才可以考虑进行并行处理。如果经常性的繁忙,贸然使用并行只能加剧资源的争用。



SQL> select count(*) from hlb;

  COUNT(*)
----------
     72583

SQL> alter table hlb parallel;

Table altered.

SQL> select * from v$px_process;

no rows selected

SQL> select count(*) from hlb;

  COUNT(*)
----------
     72583

SQL> select * from v$px_process;

SERVER_N STATUS                    PID
-------- ------------------ ----------
SPID                                                    SID    SERIAL#
------------------------------------------------ ---------- ----------
P000     AVAILABLE                  26
29838

P001     AVAILABLE                  32
29840

并行伺候进程是一种特殊的Server Process,本质上是一种可共享的slave进程。专用连接模式下,一般的Server Process与Client Process是“同生共死”的关系,终身服务于一个Client Process。而伺候slave进程是通过进程池进行管理的,一旦启动初始化,就会在一定时间内驻留在系统中,等待下次并行处理到来。此时,我们检查v$process视图,也可以找到对应的信息


SQL> select count(*) from v$px_process;

  COUNT(*)
----------
         0

SQL> select count(*) from hlb;         

  COUNT(*)
----------
     72583

SQL> select count(*) from v$px_process;

  COUNT(*)
----------
         2

SQL> select * from v$px_process;

SERVER_N STATUS                    PID
-------- ------------------ ----------
SPID                                                    SID    SERIAL#
------------------------------------------------ ---------- ----------
P001     AVAILABLE                  30
30041

P000     AVAILABLE                  26
30038


在系统层面也可以查到相关pid

oracle   29753     1  0 May20 ?        00:00:00 ora_q001_orcl
oracle   29838     1  0 01:59 ?        00:00:00 ora_p000_orcl
oracle   29840     1  0 01:59 ?        00:00:00 ora_p001_orcl
oracle   29858 25685  0 02:00 pts/4    00:00:00 grep ora_

由于此时查询已经结束,对应的并行会话信息,已经消失不可见。


SQL> select * from v$px_session;
SADDR SID SERIAL# QCSID QCSERIAL# 
-------- ---------- ---------- ---------- ----------


但是,如果任务的时间长,是可以捕获到对应信息的。从上面的情况看,我们执行一个并行操作时,Oracle会从伺候进程池中获取到对应的并行进程,
来进行操作。当操作完成后,伺候进程还会等待一定时间,之后回收。并行操作进程的资源消耗,通过v$px_sysstat视图查看。


SQL> col statistic for a30;
SQL> select * from v$px_process_sysstat;
STATISTIC VALUE
------------------------------ ----------
Servers In Use 0
Servers Available 0
Servers Started 2
Servers Shutdown 2

…………

…………


select sql_text, sql_id, version_count from v$sqlarea where sql_text like 'select count(*) from hlb%';
 
select * from table(dbms_xplan.display_cursor('c2sj5pv3xf2c3',format => 'advanced', cursor_child_no => 0));


SQL_ID  c2sj5pv3xf2c3, child number 0
-------------------------------------
select count(*) from hlb

Plan hash value: 2138921590

--------------------------------------------------------------------------------------------------------
| Id  | Operation              | Name     | Rows  | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |          |       |   156 (100)|          |        |      |            |
|   1 |  SORT AGGREGATE        |          |     1 |            |          |        |      |            |
|   2 |   PX COORDINATOR       |          |       |            |          |        |      |            |
|   3 |    PX SEND QC (RANDOM) | :TQ10000 |     1 |            |          |  Q1,00 | P->S | QC (RAND)  |
|   4 |     SORT AGGREGATE     |          |     1 |            |          |  Q1,00 | PCWP |            |
|   5 |      PX BLOCK ITERATOR |          | 73092 |   156   (0)| 00:00:02 |  Q1,00 | PCWC |            |
|*  6 |       TABLE ACCESS FULL| HLB      | 73092 |   156   (0)| 00:00:02 |  Q1,00 | PCWP |            |
--------------------------------------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$1
   6 - SEL$1 / HLB@SEL$1


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值