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博客 ” ,链接:https://blog.itpub.net/8242091/viewspace-588742/ ,如需转载,请注明出处,否则将追究法律责任。