Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Mailing Lists -> Oracle-L -> Re: strange SP ??? with explan plan and tkprof report

Re: strange SP ??? with explan plan and tkprof report

From: Stephane Faroult <sfaroult_at_oriole.com>
Date: Mon, 23 Jul 2001 13:25:54 -0700
Message-ID: <F001.003528FB.20010723133325@fatcity.com>

Leslie Lu wrote:
>
> --- Leslie Lu <leslie_y_lu_at_yahoo.com> wrote:
> > Hi all,
> >
> > I have a SP which returns a refcursor. The SP
> > executes immediately, but when I do a print of the
> > refcursor, it takes about 2 minutes to return only 1
> > row!!!
> >
> > SQL> var xx refcursor
> > SQL>exec
> > lp_ccgetcustaddracctbyacct_00('20034662',33,:xx);
> > (instantaneous)
> > SQL>print :xx (about 2 minutes !!!!)
> >
> > Any suggestion??? Thank you very much.
> >
> > Leslie
>
> It's 815 on Sun 5.6.
>
> Here are the explain plan:
> Query Plan
> --------------------------------------------------------------------------------
> SELECT STATEMENT Cost =
> NESTED LOOPS
> NESTED LOOPS OUTER
> NESTED LOOPS
> TABLE ACCESS BY INDEX ROWID CUSTOMER_ACCT
> INDEX UNIQUE SCAN PK_CUSTOMER_ACCT
> TABLE ACCESS BY INDEX ROWID CUSTOMER
> INDEX UNIQUE SCAN PK_CUSTOMER
> TABLE ACCESS BY INDEX ROWID BUSINESS
> INDEX UNIQUE SCAN PK_BUSINESS
> TABLE ACCESS BY INDEX ROWID ADDRESS
> INDEX UNIQUE SCAN PK_ADDRESS
>

Leslie,

   As you have probably noticed, your attachments have been removed, so ...
I don't know exactly how SQL*Plus handles ref cursors, but parsing is peanuts, especially today (since parsing is now done without contacting the server), where it is mainly checking that your cursor is syntactically correct. The bulk of the job is done during the 'exec', which does everything to be ready to immediately get the first row at the first 'fetch' call. Quite obviously, your 'exec' takes a long time. There is nothing obviously wrong in your explain plan - except that perhaps you are not accessing tables in the proper order. If your key is the customer id, just try to rewrite your query as

                    select /*+ ORDERED */ ...
                    from CUSTOMER,
                         CUSTOMER_ACCT,
                         BUSINESS,
                         ADDRESS
                    where ...

It may be faster. Always start with the table the key of which is provided, then follow the links suggested by foreign keys.

-- 
Regards,

Stephane Faroult
Oriole Corporation
Voice:  +44  (0) 7050-696-269 
Fax:    +44  (0) 7050-696-449 
Performance Tools & Free Scripts
--------------------------------------------------------------
http://www.oriole.com, designed by Oracle DBAs for Oracle DBAs
--------------------------------------------------------------
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Stephane Faroult
  INET: sfaroult_at_oriole.com

Fat City Network Services    -- (858) 538-5051  FAX: (858) 538-5051
San Diego, California        -- Public Internet access / Mailing Lists
--------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: ListGuru_at_fatcity.com (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).
Received on Mon Jul 23 2001 - 15:25:54 CDT

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US