Oracle Parallel模式

Posted 来陪朕侍寝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle Parallel模式相关的知识,希望对你有一定的参考价值。

一、Parallel

在Oracle中,PARALLEL(并行)方式最大化调用计算机资源来成倍提高数据分析效率。

1. 用途

强行启用并行度来执行当前SQL。这个在Oracle 9i之后的版本可以使用,之前的版本现在没有环境进行测试。也就是说,加上这个说明,可以强行启用Oracle的多线程处理功能。举例的话,就像电脑装了多核的CPU,但大多情况下都不会完全多核同时启用(2核以上的比较明显),使用parallel说明,就会多核同时工作,来提高效率。
但本身启动这个功能,也是要消耗资源与性能的。所有,一般都会在返回记录数大于100万时使用,效果也会比较明显。

2. 语法

/*+parallel(table_short_name,cash_number)*/


这个可以加到insert、delete、update、select的后面来使用(和rule的用法差不多,有机会再分享rule的用法)

开启parallel功能的语句是:

alter session enable parallel dml;

这个语句是DML语句哦,如果在程序中用,用execute的方法打开。

 

实际应用sql

SELECT /*+ parallel(PZFL,3) parallel(PZK,3) parallel(TRAN,3) */
 PZK.JSPZK_PZNM PZNM,
 PZK.JSPZK_JGBH JGBH,
 PZFL.JSPZFL_ZY FLZY,
 PZK.JSPZK_REVER_DATE CMRQ,
 (SELECT T.CUST_NAME
    FROM CUST_CORP_INFO T
   WHERE T.CUST_CODE = PZFL.JSPZFL_DWBH) CUSTNAME,
 KHXX.cust_code CUSTID,
 (SELECT F_JGMC FROM LSJGZD WHERE F_JGBH = PZK.JSPZK_JGBH) JGMC,
 PZK.JSPZK_BZ ZY,
 DECODE(PZK.JSPZK_BSNS_SRC, 10, 10, 11) BSNSSOURCE,
 PZK.JSPZK_PZRQ PZRQ,
 PZK.JSPZK_START_ACCUAL_DATE QXRQ,
 PZK.JSPZK_PZSJ PZSJ,
 PZK.JSPZK_PZBH PZBH,
 PZK.JSPZK_PZLX PZLX,
 PZFL.JSPZFL_ZHBH ZHBH,
 PZFL.JSPZFL_KMBH KMBH,
 DECODE(JSPZFL_JZFX, 1, JSPZFL_JE, 0) JFFS,
 DECODE(JSPZFL_JZFX, 2, JSPZFL_JE, 0) DFFS,
 DECODE(KMZD.F_YEFX, 2, PZFL.JSPZFL_BAL * (-1), PZFL.JSPZFL_BAL) ZHDQYE,
 DECODE(KMZD.F_YEFX,
        2,
        NVL(PZFL.JSPZFL_FUNDSPOOL_BAL, 0) * (-1),
        NVL(PZFL.JSPZFL_FUNDSPOOL_BAL, 0)) DQSCYE,
 KMZD.F_YEFX YEFX,
 KMZD.F_KMMC KMMC,
 (SELECT F_WBMC FROM LSWBZD WHERE F_WBBH = PZFL.JSPZFL_BZ) WBMC,
 TRAN.BUSI_TRAC_CODE YW,
 DECODE(PZK.JSPZK_KMACCFLAG, 1, 已记账, 0, 未记账) KMACCFLAG,
 PZFL.JSPZFL_ZHMC MC,
 PZK.JSPZK_DJBH DJBH,
 PZK.JSPZK_PZBZ PZBZ,
 PZK.JSPZK_JZBZ JZBZ,
 (SELECT F_NAME FROM LSGYZD WHERE F_GYBH(+) = PZK.JSPZK_ZDR) ZDR,
 (SELECT F_NAME FROM LSGYZD WHERE F_GYBH(+) = PZK.JSPZK_JZR) JZR,
 PZK.JSPZK_SGPZNM SGPZH ,
 PZFL.JSPZFL_OPP_NAME OPPNAME,
 PZFL.JSPZFL_OPP_OPEN_BANK OPPBANK,
 PZFL.JSPZFL_OPP_ACTNO OPPACTNO,
 TRAN.OPP_CUST_NAME,
 TRAN.OPP_CUST_ACC_CODE
  FROM JSPZK PZK, JSPZFL PZFL, TRAN_FLOW TRAN, CUST_BASE KHXX, LSKMZD KMZD
 WHERE PZK.JSPZK_PZNM = PZFL.JSPZFL_PZNM
   AND TRAN.TRAC_ID(+) = PZK.JSPZK_DJBH
   AND PZFL.JSPZFL_DWBH = KHXX.cust_code
   AND PZFL.JSPZFL_KMBH = KMZD.F_KMBH(+)
   and exists (select 1
          from V_DIC_ACC ACC
         where ACC.BH = PZFL.JSPZFL_ZHBH
           AND ACC.BH = 990110100187704203)
   AND PZK.JSPZK_PZRQ >= 20181224
   AND PZK.JSPZK_PZRQ <= 20181224
   AND PZK.JSPZK_JGBH = 99
   AND PZK.JSPZK_JZBZ IN (1, 2)
 ORDER BY PZK.JSPZK_PZNM, PZFL.JSPZFL_FLNM

 

以上是关于Oracle Parallel模式的主要内容,如果未能解决你的问题,请参考以下文章

Oracle Parallel模式

Oracle parallel理解

Oracle db file parallel write 和 log file parallel write 等待事件

oracle 并行查询为啥只有一个进程在读。 我写了一个查询语句在里面些了个 /*+ parallel .....*/

Oracle 使用 PARALLEL 优化计划降低查询性能

Oracle Parallel Hint 中的并行度