oracle查询并行数据,Oracle并行操作之并行查询实例解析(2)

SQL> select * from v$px_process;

SERVER_NAME STATUS

PID SPID

SID SERIAL#

----------- --------- ---------- ------------------------ ---------- ----------

P000 AVAILABLE

25 5776

P001 AVAILABLE

26 5778

注意,并行伺候进程是一种特殊的Server Process,本质上是一种可共享的slave进程。专用连接模式下,一般的Server Process与Client Process是“同生共死”的关系,终身服务于一个Client Process。而伺候slave进程是通过进程池进行管理的,一旦启动初始化,就会在一定时间内驻留在系统中,等待下次并行处理到来。

此时,我们检查v$process视图,也可以找到对应的信息。

SQL> select * from v$process;

PID SPID

PNAME USERNAME

SERIAL# PROGRAM

-------- ---------- ------------------------ ----- --------------- ---------- -------------------------------

25 5776

P000 oracle

13 oracle@oracle11g (P000)

26 5778

P001 oracle

6 oracle@oracle11g (P001)

(篇幅由于原因,予以省略……)

32 rows selected

对应的OS中,也存在相应的真实进程伺候。

[oracle@oracle11g ~]$ ps -ef | grep oracle

(篇幅由于原因,予以省略……)

oracle 5700 1 0 17:29 ? 00:00:02 oraclewilson (LOCAL=NO)

oracle 5723 1 0 17:33 ? 00:00:00 ora_smco_wilson

oracle 5764 1 2 17:40 ? 00:00:05 oraclewilson (LOCAL=NO)

oracle 5774 1 0 17:42 ? 00:00:00 oraclewilson (LOCAL=NO)

oracle 5776 1 0 17:43 ? 00:00:00 ora_p000_wilson

oracle 5778 1 0 17:43 ? 00:00:00 ora_p001_wilson

oracle 5820 1 1 17:44 ? 00:00:00 ora_w000_wilson

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

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

Servers Highwater

2

Servers Cleaned Up

0

Server Sessions

6

Memory Chunks Allocated

4

Memory Chunks Freed

0

Memory Chunks Current

4

Memory Chunks HWM

4

Buffers Allocated

30

Buffers Freed

30

Buffers Current

0

Buffers HWM

8

15 rows selected

下面,我们检查一下执行计划信息。

SQL> set pagesize 10000;

SQL> select * from table(dbms_xplan.display_cursor('2jkn7rpsbj64t',format => 'advanced',cursor_child

_no => 1));

PLAN_TABLE_OUTPUT

----------------------------------------------------------------------------------------------------

SQL_ID 2jkn7rpsbj64t, child number 1

-------------------------------------

select count(*) from t

Plan hash value: 3126468333

----------------------------------------------------------------------------------------------------

| Id | Operation

| Name | Rows | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib

----------------------------------------------------------------------------------------------------

| 0 | SELECT STATEMENT |

| | 2478 (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 |

| 1160K| 2478 (1)| 00:00:30 | Q1,00 | PCWC |

|* 6 | TABLE ACCESS FULL| T | 1160K| 2478 (1)| 00:00:30 | Q1,00 | PCWP |

----------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

6 - access(:Z>=:Z AND :Z<=:Z)

从执行计划的条件(6 - access(:Z>=:Z AND :Z<=:Z))中,我们可以看到任务分配,之后分别进行全表扫描。最后排序计算count,合并结果的过程。

4、结论

Oracle Parallel Query是经常使用到的一种并行操作技术。相对于DDL、DML等类型操作,并行查询更可以作为系统功能的一个步骤来进行。

进行并行查询最大的风险就是并行滥用和失控的出现。这也是Oracle一直致力解决的问题。在Oracle11gR2中,引入了Parallel Statement Queuing(PSQ)技术特性。通常,只要并行伺候池允许,Oracle会引入尽可能多的并行进程进行操作。PSQ技术的出现,就是从资源角度加入了并行控制。

当系统繁忙的时候,PSQ会将一些要进行的并行操作进入等待状态,防止并行环境的恶化。当环境好转之后,等待队列中的并行语句就进入执行状态。这个特性就可以有效的防止并行滥用的出现。

免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值