| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Mailing Lists -> Oracle-L -> Big Difference in Select and Create Table As Select Traces
Our Peopesoft folks are going through the upgrade process. One of the updates takes forever, one of the things I tried was to materialize the subquery in the update. I was not able to do so.
Here is the subquery being run as a query
SELECT DISTINCT J1.EMPLID
FROM PS_JOB J1 ,PS_SAL_RATECD_TBL S1, PS_COMPENSATION
WHERE J1.EMPLID = PS_COMPENSATION.EMPLID AND
J1.EMPL_RCD = PS_COMPENSATION.EMPL_RCD AND
J1.EFFDT = PS_COMPENSATION.EFFDT AND
J1.EFFSEQ = PS_COMPENSATION.EFFSEQ AND
S1.SETID = J1.SETID_SALARY AND
S1.SAL_ADMIN_PLAN = J1.SAL_ADMIN_PLAN
AND S1.GRADE = J1.GRADE
AND S1.STEP = J1.STEP AND
S1.EFFDT = ( SELECT MAX(S2.EFFDT)
FROM PS_SAL_RATECD_TBL S2
WHERE S2.SETID = J1.SETID_SALARY AND
S2.SAL_ADMIN_PLAN = J1.SAL_ADMIN_PLAN AND
S2.GRADE = J1.GRADE AND
S2.STEP = J1.STEP AND
S2.EFFDT <= J1.EFFDT) AND
S1.COMP_RATECD = PS_COMPENSATION.COMP_RATECD
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.20 0.18 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 63 7.74 10.17 8932 3189 0 923
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 65 7.94 10.36 8932 3189 0 923
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 48 (ORACLE)
Rows Row Source Operation
------- ---------------------------------------------------
923 HASH UNIQUE (cr=3189 pr=8932 pw=8932 time=10166810 us) 7691 FILTER (cr=3189 pr=8932 pw=8932 time=10847080 us) 72798 HASH GROUP BY (cr=3189 pr=8932 pw=8932 time=10085197 us)
415120 HASH JOIN (cr=3189 pr=7882 pw=7882 time=8460323 us) 415825 HASH JOIN (cr=2972 pr=644 pw=644 time=1410302 us) 42651 HASH JOIN (cr=2934 pr=0 pw=0 time=181414 us) 2759 TABLE ACCESS FULL PS_SAL_RATECD_TBL (cr=38 pr=0 pw=0 time=181 us) 31863 TABLE ACCESS FULL PS_JOB (cr=2896 pr=0 pw=0 time=95775 us) 2759 TABLE ACCESS FULL PS_SAL_RATECD_TBL (cr=38 pr=0 pw=0 time=188 us) 31641 INDEX FAST FULL SCAN PS_COMPENSATION (cr=217 pr=0 pw=0 time=187 us)(object id 136687)
Rows Execution Plan
------- ---------------------------------------------------
0 SELECT STATEMENT MODE: ALL_ROWS
923 HASH (UNIQUE)
72798 HASH (GROUP BY)
415120 HASH JOIN
415825 HASH JOIN
42651 HASH JOIN
2759 TABLE ACCESS MODE: ANALYZED (FULL) OF
'PS_SAL_RATECD_TBL' (TABLE)
31863 TABLE ACCESS MODE: ANALYZED (FULL) OF 'PS_JOB'
(TABLE)
2759 TABLE ACCESS MODE: ANALYZED (FULL) OF
'PS_SAL_RATECD_TBL' (TABLE)
31641 INDEX MODE: ANALYZED (FAST FULL SCAN) OF
'PS_COMPENSATION' (INDEX (UNIQUE))
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
SQL*Net message to client 63 0.00 0.00
direct path write temp 1196 0.02 3.25
direct path read temp 1196 0.01 0.33
SQL*Net message from client 63 0.00 0.04
********************************************************************************
alter session set events '10046 trace name off'
Here's what happens when I try to materialize it and aborted that attempt
create table ps_compensation2 nologging as SELECT DISTINCT J1.EMPLID
FROM PS_JOB J1 ,PS_SAL_RATECD_TBL S1, PS_COMPENSATION
WHERE J1.EMPLID = PS_COMPENSATION.EMPLID AND
J1.EMPL_RCD = PS_COMPENSATION.EMPL_RCD AND
J1.EFFDT = PS_COMPENSATION.EFFDT AND
J1.EFFSEQ = PS_COMPENSATION.EFFSEQ AND
S1.SETID = J1.SETID_SALARY AND
S1.SAL_ADMIN_PLAN = J1.SAL_ADMIN_PLAN
AND S1.GRADE = J1.GRADE
AND S1.STEP = J1.STEP AND
S1.EFFDT = ( SELECT MAX(S2.EFFDT)
FROM PS_SAL_RATECD_TBL S2
WHERE S2.SETID = J1.SETID_SALARY AND
S2.SAL_ADMIN_PLAN = J1.SAL_ADMIN_PLAN AND
S2.GRADE = J1.GRADE AND
S2.STEP = J1.STEP AND
S2.EFFDT <= J1.EFFDT) AND
S1.COMP_RATECD = PS_COMPENSATION.COMP_RATECD
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.08 0.10 0 0 0 0
Execute 1 257.30 574.49 97535 238 17 0
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 2 257.38 574.60 97535 238 17 0
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 48 (ORACLE)
Rows Execution Plan
------- ---------------------------------------------------
0 CREATE TABLE STATEMENT MODE: ALL_ROWS
0 LOAD AS SELECT OF 'PS_COMPENSATION2'
0 HASH (UNIQUE)
0 NESTED LOOPS
0 NESTED LOOPS
0 HASH JOIN
0 VIEW OF 'VW_SQ_1' (VIEW)
0 HASH (GROUP BY)
0 MERGE JOIN
0 SORT (JOIN)
0 INDEX MODE: ANALYZED (FAST FULL SCAN) OF
'PS_SAL_RATECD_TBL' (INDEX (UNIQUE))
0 SORT (JOIN)
0 INDEX MODE: ANALYZED (FAST FULL SCAN) OF
'PSDJOB' (INDEX)
0 TABLE ACCESS MODE: ANALYZED (FULL) OF 'PS_JOB'
(TABLE)
0 INDEX MODE: ANALYZED (RANGE SCAN) OF
'PS_SAL_RATECD_TBL' (INDEX (UNIQUE))
0 INDEX MODE: ANALYZED (RANGE SCAN) OF 'PS_COMPENSATION'
(INDEX (UNIQUE))
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
control file sequential read 4 0.00 0.00
direct path write temp 55978 0.13 190.68
direct path read temp 13934 0.16 173.02
log file sync 1 0.00 0.00
SQL*Net break/reset to client 1 0.00 0.00
SQL*Net message to client 1 0.00 0.00
SQL*Net message from client 1 0.01 0.01
********************************************************************************
Note the different query path. Also the great rise in direct path * waits. Has anyone else seen anything like this? Any ideas?
This is 10.2.0.2.0
Ian MacGregor
Stanford Linear Accelerator Center
ian_at_slac.stanford.edu
-- http://www.freelists.org/webpage/oracle-lReceived on Thu Jan 04 2007 - 17:56:18 CST
![]() |
![]() |