Re: Query Tuning

From: joel garry <joel-garry_at_home.com>
Date: Wed, 12 Nov 2008 17:08:52 -0800 (PST)
Message-ID: <b9bf3c63-90bf-4073-8edc-b6a73ec53f38@v22g2000pro.googlegroups.com>


On Nov 12, 11:04 am, Draki <gnavn..._at_gmail.com> wrote:
> Hi All,
> One developer wrote this SQL for Oracle E-Biz vision DB, but it's
> taking hours to fetch the data. I did last query tuning 4-5 years ago.
> Any pointer would be appreciated:
>
> EXPLAIN PLAN SET STATEMENT_ID = 'ABC' FOR
> SELECT COUNT(1) FROM OE_ORDER_HEADERS_ALL OOHA WHERE OOHA.ORDER_NUMBER>= 1 AND OOHA.ORDER_NUMBER <=  999999 AND OOHA.ORG_ID =  '204'
>
> AND TRUNC(OOHA.ORDERED_DATE) >= TRUNC(NVL(TO_DATE('01-JAN-1995','DD-
> MON-YYYY'),OOHA.ORDERED_DATE)) AND TRUNC(OOHA.ORDERED_DATE) <= TRUNC
> (NVL(TO_DATE('31-DEC-2007','DD-MON-YYYY'),OOHA.ORDERED_DATE))
> AND TRUNC(OOHA.CREATION_DATE) >= TRUNC(NVL(TO_DATE('01-JAN-1995','DD-
> MON-YYYY'),OOHA.CREATION_DATE)) AND TRUNC(OOHA.CREATION_DATE) <= TRUNC
> (NVL(TO_DATE('31-DEC-2007','DD-MON-YYYY'),OOHA.CREATION_DATE))
> AND
Note this spot, in my comment below.

> NOT EXISTS (SELECT 1 FROM   ar.ra_customer_trx_lines_ALL
> rctl,ar.ra_customer_trx_ALL rct,ar.ar_payment_schedules_ALL aps
> WHERE  rctl.interface_line_attribute1 = OOHA.ORDER_NUMBER
> AND    rctl.interface_line_attribute2 IN (SELECT otl.NAME FROM
> ont.oe_transaction_types_tl otl
>                                                         WHERE  otl.LANGUAGE = (SELECT language_code FROM
> applsys.fnd_languages WHERE installed_flag = 'B')
>                                                         AND    otl.transaction_type_id = OOHA.order_type_id)
> AND    rctl.interface_line_context = 'ORDER ENTRY'
> AND    rctl.customer_trx_id = rct.customer_trx_id
> AND    rct.customer_trx_id = aps.customer_trx_id
> AND    rct.complete_flag    = 'N'
> AND    aps.status = 'OP')
>
> OPERATION                                      OBJECT
>
> SELECT STATEMENT ()
> SORT (AGGREGATE)
> FILTER ()
> TABLE ACCESS (FULL)     OE_ORDER_HEADERS_ALL
> TABLE ACCESS (BY INDEX ROWID)   AR_PAYMENT_SCHEDULES_ALL
> NESTED LOOPS ()
> NESTED LOOPS ()
> NESTED LOOPS ()
> TABLE ACCESS (BY INDEX ROWID)   OE_TRANSACTION_TYPES_TL
> INDEX (UNIQUE SCAN)     OE_TRANSACTION_TYPES_TL_U1
> TABLE ACCESS (BY INDEX ROWID)   FND_LANGUAGES
> INDEX (RANGE SCAN)      FND_LANGUAGES_N1
> TABLE ACCESS (BY INDEX ROWID)   RA_CUSTOMER_TRX_LINES_ALL
> INDEX (RANGE SCAN)      ADS_RA_CUSTOMER_TRX_LINES_ALL
> TABLE ACCESS (BY INDEX ROWID)   RA_CUSTOMER_TRX_ALL
> INDEX (UNIQUE SCAN)     RA_CUSTOMER_TRX_U1
> INDEX (RANGE SCAN)      AR_PAYMENT_SCHEDULES_N2
> SELECT STATEMENT ()
> SORT (AGGREGATE)
> FILTER ()
> TABLE ACCESS (FULL)     OE_ORDER_HEADERS_ALL
> TABLE ACCESS (BY INDEX ROWID)   AR_PAYMENT_SCHEDULES_ALL
> NESTED LOOPS ()
> NESTED LOOPS ()
> NESTED LOOPS ()
> TABLE ACCESS (BY INDEX ROWID)   OE_TRANSACTION_TYPES_TL
> INDEX (UNIQUE SCAN)     OE_TRANSACTION_TYPES_TL_U1
> TABLE ACCESS (BY INDEX ROWID)   FND_LANGUAGES
> INDEX (RANGE SCAN)      FND_LANGUAGES_N1
> TABLE ACCESS (BY INDEX ROWID)   RA_CUSTOMER_TRX_LINES_ALL
> INDEX (RANGE SCAN)      ADS_RA_CUSTOMER_TRX_LINES_ALL
> TABLE ACCESS (BY INDEX ROWID)   RA_CUSTOMER_TRX_ALL
> INDEX (UNIQUE SCAN)     RA_CUSTOMER_TRX_U1
> INDEX (RANGE SCAN)      AR_PAYMENT_SCHEDULES_N2
>
> TIA.
> Regards,
> Navneet

I haven't looked too close, but I'm guessing that some of those conditions on the ordered_date or order_number disallow index usage, if you have one. Try this: create a table as select * from OE_ORDER_HEADERS_ALL OOHA with all those conditions, then do a select with all the and conditions after that on that table. If it's not a not exists problem, that should give a better idea how long it should take, and maybe a plan to sink your teeth into.

Also, state your version to 4 decimal places, and perhaps use the appropriate OEM or EM tool to see the plan.

jg

--
@home.com is bogus.
Bob Saget is dead?
Received on Wed Nov 12 2008 - 19:08:52 CST

Original text of this message