oracle parallel

来源:互联网 发布:淘宝宝贝所在地怎么改 编辑:程序博客网 时间:2024/05/22 16:06

文章来自: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(*)----------     72583SQL> alter table hlb parallel;Table altered.SQL> select * from v$px_process;no rows selectedSQL> select count(*) from hlb;  COUNT(*)----------     72583SQL> select * from v$px_process;SERVER_N STATUS                    PID-------- ------------------ ----------SPID                                                    SID    SERIAL#------------------------------------------------ ---------- ----------P000     AVAILABLE                  2629838P001     AVAILABLE                  3229840

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


SQL> select count(*) from v$px_process;  COUNT(*)----------         0SQL> select count(*) from hlb;           COUNT(*)----------     72583SQL> select count(*) from v$px_process;  COUNT(*)----------         2SQL> select * from v$px_process;SERVER_N STATUS                    PID-------- ------------------ ----------SPID                                                    SID    SERIAL#------------------------------------------------ ---------- ----------P001     AVAILABLE                  3030041P000     AVAILABLE                  2630038


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

oracle   29753     1  0 May20 ?        00:00:00 ora_q001_orcloracle   29838     1  0 01:59 ?        00:00:00 ora_p000_orcloracle   29840     1  0 01:59 ?        00:00:00 ora_p001_orcloracle   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 hlbPlan 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


0 0
原创粉丝点击