Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Mailing Lists -> Oracle-L -> RE: Issue with Parallel query execution
Am I right to sum this up as follows?
"Increasing the amount of capacity consumed by this query by 4x increases its throughput by 2x."
Or is the capacity increase really 8x, once you account for both producer and consumer PX processes?
Cary Millsap
Hotsos Enterprises, Ltd.
http://www.hotsos.com
Nullius in verba
Hotsos Symposium 2007 / March 4-8 / Dallas Visit www.hotsos.com for curriculum and schedule details...
-----Original Message-----
From: oracle-l-bounce_at_freelists.org
[mailto:oracle-l-bounce_at_freelists.org] On Behalf Of
Govind.Arumugam_at_alltel.com
Sent: Wednesday, February 21, 2007 2:34 PM
To: oracle-l_at_freelists.org
Subject: RE: Issue with Parallel query execution
Just to wrap up this discussion thread, this is what I found.
Oracle determines the parallel degree depending on the number of rows in the table debtmanagernewaccountc1. I have set the parallel degree of this table from 1 to 4. It now runs in parallel mode all the time. The query uses the materialized subquery using WITH clause of 9i. I have reduced the average runtime by 50%.
WITH dmnewaccountnorslrc1 AS
( SELECT dm1.marketcd, dm1.acctnodenbr FROM debtmanagernewaccountc1 dm1 WHERE NOT EXISTS ( SELECT 1 FROM customer cu WHERE dm1.acctnodenbr = cu.nodenbr AND cu.custtypecd = 'RS')) SELECT dm.marketcd, dm.acctnodenbr, ol1.nodenbr, ol1.ordernbr, ol1.orderlinenbr, ol1.orderlinetypecd, ol1.startts, oh1.closets, NVL (msc.mobilechgresncd, ' '), NVL (msc.switchxactstatuscd, '')
FROM dmnewaccountnorslrc1 dm,
orderline ol1, orderheader oh1, mobilestatuschange msc WHERE ( (dm.acctnodenbr > ' ' AND dm.marketcd = ' ') OR dm.acctnodenbr >= ' ' ) AND dm.acctnodenbr = oh1.acctnodenbr AND oh1.ordernbr = ol1.ordernbr AND oh1.marketcd = ol1.marketcd AND ol1.startts <= TO_DATE ('20070109200224', 'YYYYMMDDHH24MISS') AND oh1.closets <= TO_DATE ('20070109200224', 'YYYYMMDDHH24MISS') AND oh1.closets > TO_DATE ('20050109200224', 'YYYYMMDDHH24MISS') AND oh1.orderstatuscd = 'C' AND ol1.ordernbr = msc.ordernbr(+) AND ol1.orderlinenbr = msc.orderlinenbr(+)UNION
ol1.orderlinenbr, ol1.orderlinetypecd, ol1.startts, oh1.closets,
' ' AS mobilechgresncd, ' ' AS switchxactstatuscd FROM dmnewaccountnorslrc1 dm,
accounthistory ah, orderline ol1, orderheader oh1 WHERE ( (dm.acctnodenbr > ' ' AND dm.marketcd = ' ') OR dm.acctnodenbr >= ' ' ) AND dm.marketcd = ah.marketcd AND dm.acctnodenbr = ah.parentnodenbr AND ah.effectivets <= '20070109200224' AND ah.effectivets > '20050109200224' AND ah.nodenbr = ol1.nodenbr AND oh1.ordernbr = ol1.ordernbr AND oh1.marketcd = ol1.marketcd AND ol1.startts <= TO_DATE ('20070109200224', 'YYYYMMDDHH24MISS') AND oh1.closets <= TO_DATE ('20070109200224', 'YYYYMMDDHH24MISS') AND oh1.closets > TO_DATE ('20050109200224', 'YYYYMMDDHH24MISS') AND oh1.orderstatuscd = 'C'
-----Original Message-----
From: oracle-l-bounce_at_freelists.org
[mailto:oracle-l-bounce_at_freelists.org]On Behalf Of Arumugam, Govind
Sent: Tuesday, December 12, 2006 3:13 PM
To: oracle-l_at_freelists.org
Subject: Issue with Parallel query execution
Dear Gurus,
I am troubleshooting one of the daily batch programs that is not requesting the right amount of parallel degree. I see this job requesting a parallel degree of 4 and getting 4. But in yesterday's run, it only asked for 2 and got 2. The degree of parallelism is set at the table level. We are on "Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit Production"
The job started at 21:16 and completed at 22:47, a runtime of 91 minutes running with a degree of 2. It typically runs in less than 40 minutes if it runs with a degree of 4.
I went through the metalink note Checklist for Performance Problems with
Parallel Execution Note:280939.1.
The data from v$px_session is saved off to a file every 5 minutes using
the query "select * from v$px_session"
Date Time v$sysstat Parameter Name
Value
12112006 21:10 Parallel operations not downgraded
15727655
12112006 21:10 Parallel operations downgraded to serial
17048
12112006 21:10 Parallel operations downgraded 25 to 50 pct
1162
12112006 21:10 Parallel operations downgraded 1 to 25 pct
583
12112006 21:15 Parallel operations not downgraded
15729888
12112006 21:15 Parallel operations downgraded to serial
17048
12112006 21:15 Parallel operations downgraded 25 to 50 pct
1162
12112006 21:15 Parallel operations downgraded 1 to 25 pct
583
The job started around here. We had a plenty of parallel server threads
available for Oracle to use as seen
by "select * from V$PQ_SYSSTAT". We used up just 72 out of a maximum of
281 parallel threads.
STATISTIC VALUE ------------------------------ ---------- Servers Busy 72 Servers Idle 20 Servers Highwater 281
12112006 21:20 Parallel operations not downgraded
15732051
12112006 21:20 Parallel operations downgraded to serial
17052
12112006 21:20 Parallel operations downgraded 25 to 50 pct
1162
12112006 21:20 Parallel operations downgraded 1 to 25 pct
583
12112006 21:25 Parallel operations not downgraded
15733831
12112006 21:25 Parallel operations downgraded to serial
17052
12112006 21:25 Parallel operations downgraded 25 to 50 pct
1162
12112006 21:25 Parallel operations downgraded 1 to 25 pct
583
SID SERIAL# PSID USERNAME PROCESS Command STAT PROGRAM Physical Rds ------ ------- ------ --------- ------------ ------------------ ---- ------------------------------ ------------ 528 53832 1332 PVXDBE3A 5856 SELECT ACTI oracle_at_acilf510 (P034) 0 1332 34009 1332 PVXDBE3A 25735 ACTI ? @acilh508 (TNS V1-V3) 4,204 1890 49106 1332 PVXDBE3A 5866 SELECT ACTI oracle_at_acilf510 (P037) 13,947 1529 16639 1332 PVXDBE3A 5862 SELECT ACTI oracle_at_acilf510 (P035) 0 2360 24030 1332 PVXDBE3A 5864 SELECT ACTI oracle_at_acilf510 (P036) 14,019 SADDR SID SERIAL# QCSID QCSERIAL# QCINST_ID SERVER_GROUP SERVER_SET SERVER# DEGREE REQ_DEGREE ---------------- ------ ------- ---------- ---------- ---------------------- ---------- ---------- ---------- ----------
0000040240A4D0E8 528 53832 1332 34009 1 1 1 1 2 2 0000040241AC5F10 1332 34009 1332 000004023FAC6F98 1529 16639 1332 34009 1 1 1 2 2 2 0000040243B3DAF8 2360 24030 1332 34009 1 1 2 1 2 2 0000040243AFFA18 1890 49106 1332 34009 1 1 2 2 2 2
Is there a way for us to find out why the DOP was chosen at 2 for this query?
I would greatly appreciate any insight. I am thinking about "alter SESSION FORCE PARALLEL QUERY PARALLEL 4" through a logon trigger to force the DOP at 4 as a workaround. This will be tested in a production like environment first. Any other solutions or pointers?
Sorry about the long e-mail.
Thanks,
Govind
-- http://www.freelists.org/webpage/oracle-l ************************************************************************ ****************** The information contained in this message, including attachments, may contain privileged or confidential information that is intended to be delivered only to the person identified above. If you are not the intended recipient, or the person responsible for delivering this message to the intended recipient, Alltel requests that you immediately notify the sender and asks that you do not read the message or its attachments, and that you delete them without copying or sending them to anyone else. -- http://www.freelists.org/webpage/oracle-l -- http://www.freelists.org/webpage/oracle-lReceived on Wed Feb 21 2007 - 15:08:23 CST