ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 9i并行执行的限制

9i并行执行的限制

原创 Linux操作系统 作者:westzq1984 时间:2009-04-12 20:54:58 0 删除 编辑

SELECT zsxh_dk, pzxh, zspzxh, nsr_key, nsrsbh, nsrmc, nsbm,
       hy_dm, djzclx_dm, nsrzt_dm, nsr_swjg_dm, sssq_q_sk, sssq_z_sk
FROM ft_sb_zsxx


SQL> select decode(a.QCSERIAL#, null, 'PARENT', 'CHILD') stmt_level,
  2       a.SID,
  3       a.SERIAL#,
  4       b.USERNAME,
  5       b.OSUSER,
  6       b.SQL_HASH_VALUE,
  7       b.SQL_ADDRESS,
  8       a.DEGREE,
  9       a.REQ_DEGREE
 10  from v$px_session a, v$session b
 11  where a.SID = b.SID
 12  order by a.QCSID, stmt_level desc;

STMT_L        SID    SERIAL# USERN OSUSER          SQL_HASH_VALUE SQL_ADDRESS          DEGREE REQ_DEGREE
------ ---------- ---------- ----- --------------- -------------- ---------------- ---------- ----------
PARENT         32         43 JCZC  Administrator                0 00
CHILD          26         29 JCZC  Administrator       1545317109 07000000539253F8          4          8
CHILD          25         45 JCZC  Administrator       1545317109 07000000539253F8          4          8
CHILD          34          7 JCZC  Administrator       1545317109 07000000539253F8          4          8
CHILD          36          3 JCZC  Administrator       1545317109 07000000539253F8          4          8

由于可能存在代码字段在代码表中不能找到,所以需要替换
SELECT ZSXH_DK,PZXH,ZSPZXH, NSR_KEY,NSRSBH,NSRMC,NSBM,
    nvl((SELECT A.HYML_DM FROM DI_HYML A WHERE A.HYML_DM = B.HY_DM),'ZZZZ') HY_DM,
    DJZCLX_DM,NSRZT_DM,NSR_SWJG_DM,SSSQ_Q_SK,SSSQ_Z_SK
 FROM FT_SB_ZSXX B

SQL> select decode(a.QCSERIAL#, null, 'PARENT', 'CHILD') stmt_level,
  2       a.SID,
  3       a.SERIAL#,
  4       b.USERNAME,
  5       b.OSUSER,
  6       b.SQL_HASH_VALUE,
  7       b.SQL_ADDRESS,
  8       a.DEGREE,
  9       a.REQ_DEGREE
 10  from v$px_session a, v$session b
 11  where a.SID = b.SID
 12  order by a.QCSID, stmt_level desc;

no rows selected

这个时候是无法并行的,加了提示仍然不行
SELECT /*+parallel(B,4)*/ZSXH_DK,PZXH,ZSPZXH, NSR_KEY,NSRSBH,NSRMC,NSBM,
    nvl((SELECT A.HYML_DM FROM DI_HYML A WHERE A.HYML_DM = B.HY_DM),'ZZZZ') HY_DM,
    DJZCLX_DM,NSRZT_DM,NSR_SWJG_DM,SSSQ_Q_SK,SSSQ_Z_SK
 FROM FT_SB_ZSXX B

回来测试了下,发现10g可以并行
SQL> SELECT DEGREE FROM dba_tables WHERE table_name='TEST' AND wner='CTAIS2'
  2  ;

DEGREE
----------
         8
        
alter session set "_px_trace"= "all";

SELECT A.*,
    NVL((SELECT B.SWJG_DM FROM DM_SWJG B WHERE B.SWJG_DM = A.FLAG), 'z') swjg
 FROM TEST A

alter session set "_px_trace"= "none";

在跟踪文件中可以看到ORACLE在计算并行度


但是在9i下,TRACE文件感觉是只列出了表或者提示的并行属性,就突然中断了。
估计是9i不允许这样的并行执行。

另外,如果是insert ... select 这样的语句,在9i下设置了
alter session force parallel dml,看起来是并行执行的,但是不过并行salve的子SQL
发现其并行的是INSERT操作,并不是SELECT操作
我们的应用主要是位图索引,怕多个子进程相互造成锁,索引就打住,没用这个设置

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8242091/viewspace-588742/,如需转载,请注明出处,否则将追究法律责任。

上一篇: ora-12801错误
请登录后发表评论 登录
全部评论

注册时间:2009-04-06

  • 博文量
    251
  • 访问量
    960896