Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

SQL with connect by prior running for a long time

doubtsinoraSep 9 2013 — edited Sep 11 2013

Hi,

We are using Oracle 10g. Below is a cursor sql which is having performance issues. The pAccountid is being passed from the output of a different cursor. But this cursor sql is running for a long time. Could you please help me in tuning this sql. I believe the subquery with connect by prior is causing the trouble.

The TRXNS is a huge table which is not partitioned. The query is forced to use the index on the accountid of the TRXNS table.

The accountlink table has 20,000 records and the TRXNStrack table has 10,000 records in total.

This sql executes for 200,000 pAccountids and runs for more than 8 hours.

SELECT /*+ INDEX(T TRXNS_ACCOUNTID_NIDX) */ AL.FROMACCOUNTID oldaccountid ,

                                A.ACCOUNTNUM  oldaccountnum,

                               T.TRXNSID,

                               T.TRXNSTYPEID,

                               T.DESCRIPTION ,

                               T.postdt,

                               T.TRXNSAMT

                    FROM

                    ACCOUNTLINK AL,

                    TRXNS T,

                    ACCOUNT A

                   WHERE AL.TOACCOUNTID IN

                                                         (SELECT TOACCOUNTID FROM ACCOUNTLINK START WITH TOACCOUNTID = pAccountid

                                                                                                                     CONNECT BY PRIOR FROMACCOUNTID  = TOACCOUNTID)

                        AND AL.FROMACCOUNTID = T.ACCOUNTID

                        AND A.ACCOUNTID = AL.FROMACCOUNTID

AND NOT EXISTS (select 1 from TRXNStrack trck where trck.TRXNSid = t.TRXNSid AND TRXNSTrackReasonid = 1)

                        AND T.postdt > A.CLOSEDATE

                        AND T.postdt >= sysdate-2

                        AND T.postdt <= sysdate;

Create script for trxn table:

CREATE TABLE SP.TRXNS

(

  TRXNSID      NUMBER(15) CONSTRAINT "BIN$rpIQEeyLDfbgRAAUT4DEnQ==$0" NOT NULL,

  ACCOUNTID    NUMBER(15) CONSTRAINT "BIN$rpIQEeyMDfbgRAAUT4DEnQ==$0" NOT NULL,

  STATEMENTID  NUMBER(15),

  TRXNSTYPEID  NUMBER(15),

  DESCRIPTION  VARCHAR2(80 BYTE),

  postdt     DATE,

  TRXNSAMT     NUMBER(12,2),

  TRXNSREQID   NUMBER(15),

  LASTUPDATE   DATE,

  SOURCEID     NUMBER(15),

  HIDE         VARCHAR2(1 BYTE)

)

TABLESPACE SO_TRXN_DATA

RESULT_CACHE (MODE DEFAULT)

PCTUSED    40

PCTFREE    10

INITRXNS   2

MAXTRXNS   255

STORAGE    (

            INITIAL          50M

            NEXT             1M

            MINEXTENTS       1

            MAXEXTENTS       UNLIMITED

            PCTINCREASE      0

            FREELISTS        8

            FREELIST GROUPS  1

            BUFFER_POOL      DEFAULT

            FLASH_CACHE      DEFAULT

            CELL_FLASH_CACHE DEFAULT

           )

LOGGING

NOCOMPRESS

NOCACHE

NOPARALLEL

MONITORING;

CREATE INDEX SP.TRXNS_ACCOUNTID_NIDX ON SP.TRXNS

(ACCOUNTID, postdt)

LOGGING

TABLESPACE SO_TRXN_INDEX

PCTFREE    10

INITRXNS   2

MAXTRXNS   255

STORAGE    (

            INITIAL          64K

            NEXT             1M

            MINEXTENTS       1

            MAXEXTENTS       UNLIMITED

            PCTINCREASE      0

            FREELISTS        1

            FREELIST GROUPS  1

            BUFFER_POOL      DEFAULT

            FLASH_CACHE      DEFAULT

            CELL_FLASH_CACHE DEFAULT

           )

NOPARALLEL;

below is the executing plan for this sql taken from toad :

PLAN_IDTIMESTAMPOPERATIONOPTIONSOBJECT_OWNEROBJECT_NAMEOBJECT_ALIASOBJECT_INSTANCEOBJECT_TYPEOPTIMIZERSEARCH_COLUMNSIDPARENT_IDDEPTHPOSITIONCOSTCARDINALITYBYTESCPU_COSTIO_COSTTEMP_SPACEACCESS_PREDICATESFILTER_PREDICATESPROJECTIONTIMEQBLOCK_NAME
11219/10/2013 3:30FILTER 1011 NOT EXISTS (SELECT 0 FROM "TRXNSTRACK" "TRCK" WHERE "TRXNSTRACKREASONID"=1 AND "TRCK"."TRXNSID"=:B1)AL."FROMACCOUNTID"[NUMBER,22], "T"."TRXNSID"[NUMBER,22], "T"."TRXNSTYPEID"[NUMBER,22], "T"."DESCRIPTION"[VARCHAR2,80], "T"."POSTDT"[DATE,7], "T"."TRXNSAMT"[NUMBER,22], "A"."ACCOUNTNUM"[VARCHAR2,19] SEL$5DA710D3
11219/10/2013 3:30FILTER 2121 SYSDATE@!-2<=SYSDATE@!AL."FROMACCOUNTID"[NUMBER,22], "T"."TRXNSID"[NUMBER,22], "T"."TRXNSTYPEID"[NUMBER,22], "T"."DESCRIPTION"[VARCHAR2,80], "T"."POSTDT"[DATE,7], "T"."TRXNSAMT"[NUMBER,22], "A"."ACCOUNTNUM"[VARCHAR2,19]
11219/10/2013 3:30NESTED LOOPS 3231 (#keys=0) "AL"."FROMACCOUNTID"[NUMBER,22], "T"."TRXNSID"[NUMBER,22], "T"."TRXNSTYPEID"[NUMBER,22], "T"."DESCRIPTION"[VARCHAR2,80], "T"."POSTDT"[DATE,7], "T"."TRXNSAMT"[NUMBER,22], "A"."ACCOUNTNUM"[VARCHAR2,19]
11219/10/2013 3:30NESTED LOOPS 43415111939898584 (#keys=0) "AL"."FROMACCOUNTID"[NUMBER,22], "T"."TRXNSID"[NUMBER,22], "T"."TRXNSTYPEID"[NUMBER,22], "T"."DESCRIPTION"[VARCHAR2,80], "T"."POSTDT"[DATE,7], "T"."TRXNSAMT"[NUMBER,22], "A".ROWID[ROWID,10]1
11219/10/2013 3:30NESTED LOOPS 5451419039896903 (#keys=0) "AL"."FROMACCOUNTID"[NUMBER,22], "T"."TRXNSID"[NUMBER,22], "T"."TRXNSTYPEID"[NUMBER,22], "T"."DESCRIPTION"[VARCHAR2,80], "T"."POSTDT"[DATE,7], "T"."TRXNSAMT"[NUMBER,22]1
11219/10/2013 3:30HASH JOINSEMI 6561325439890942 AL."TOACCOUNTID"="TOACCOUNTID" (#keys=1) "AL"."FROMACCOUNTID"[NUMBER,22]1
11219/10/2013 3:30INDEXFULL SCANSPACCOUNTLINK_AK1AL@SEL$1 INDEX (UNIQUE)ANALYZED 76711182521071 AL."FROMACCOUNTID"[NUMBER,22], "AL"."TOACCOUNTID"[NUMBER,22]1SEL$5DA710D3
11219/10/2013 3:30VIEW SYSVW_NSO_1VW_NSO_1@SEL$5DA710D311VIEW 86722182341071 TOACCOUNTID[NUMBER,22]1SEL$683B0107
11219/10/2013 3:30CONNECT BYNO FILTERING WITH START-WITH 9881 TOACCOUNTID=PRIOR "FROMACCOUNTID"TOACCOUNTID=56354162TOACCOUNTID[NUMBER,22], "FROMACCOUNTID"[NUMBER,22], PRIOR NULL[22], LEVEL[4] SEL$683B0107
11219/10/2013 3:30INDEXFULL SCANSPACCOUNTLINK_AK1ACCOUNTLINK@SEL$3 INDEX (UNIQUE)ANALYZED 109911182521071 ACCOUNTLINK.ROWID[ROWID,10], "FROMACCOUNTID"[NUMBER,22], "TOACCOUNTID"[NUMBER,22]1SEL$3
11219/10/2013 3:30TABLE ACCESSBY INDEX ROWIDSPTRXNST@SEL$12TABLEANALYZED 1156211632981 T."TRXNSID"[NUMBER,22], "T"."TRXNSTYPEID"[NUMBER,22], "T"."DESCRIPTION"[VARCHAR2,80], "T"."POSTDT"[DATE,7], "T"."TRXNSAMT"[NUMBER,22]1SEL$5DA710D3
11219/10/2013 3:30INDEXRANGE SCANSPTRXNS_ACCOUNTID_NIDXT@SEL$1 INDEXANALYZED212117111 2241 AL."FROMACCOUNTID"="T"."ACCOUNTID" AND "T"."POSTDT">=SYSDATE@!-2 AND "T"."POSTDT"<=SYSDATE@! T.ROWID[ROWID,10], "T"."POSTDT"[DATE,7]1SEL$5DA710D3
11219/10/2013 3:30INDEXUNIQUE SCANSPACCOUNT_PKA@SEL$1 INDEX (UNIQUE)ANALYZED11345211 901 A."ACCOUNTID"="AL"."FROMACCOUNTID" A.ROWID[ROWID,10]1SEL$5DA710D3
11219/10/2013 3:30TABLE ACCESSBY INDEX ROWIDSPACCOUNTA@SEL$13TABLEANALYZED 1434211291681 A."CLOSEDATE"<SYSDATE@! AND "T"."POSTDT">"A"."CLOSEDATE"A."ACCOUNTNUM"[VARCHAR2,19]1SEL$5DA710D3
11219/10/2013 3:30INDEXRANGE SCANSPTRXNSTRACK_TRXNSID_NIDXTRCK@SEL$6 INDEXANALYZED2151221110731 TRCK."TRXNSID"=:B1 AND "TRXNSTRACKREASONID"=1 TRCK."TRXNSID"[NUMBER,22], "TRXNSTRACKREASONID"[NUMBER,22]1SEL$6

Please help me in debugging this thanks!

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Oct 9 2013
Added on Sep 9 2013
7 comments
386 views