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_ID | TIMESTAMP | OPERATION | OPTIONS | OBJECT_OWNER | OBJECT_NAME | OBJECT_ALIAS | OBJECT_INSTANCE | OBJECT_TYPE | OPTIMIZER | SEARCH_COLUMNS | ID | PARENT_ID | DEPTH | POSITION | COST | CARDINALITY | BYTES | CPU_COST | IO_COST | TEMP_SPACE | ACCESS_PREDICATES | FILTER_PREDICATES | PROJECTION | TIME | QBLOCK_NAME |
1121 | 9/10/2013 3:30 | FILTER | | | | | | | | | 1 | 0 | 1 | 1 | | | | | | | | 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 |
1121 | 9/10/2013 3:30 | FILTER | | | | | | | | | 2 | 1 | 2 | 1 | | | | | | | | 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] | | |
1121 | 9/10/2013 3:30 | NESTED LOOPS | | | | | | | | | 3 | 2 | 3 | 1 | | | | | | | | | (#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] | | |
1121 | 9/10/2013 3:30 | NESTED LOOPS | | | | | | | | | 4 | 3 | 4 | 1 | 5 | 1 | 119 | 3989858 | 4 | | | | (#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 | |
1121 | 9/10/2013 3:30 | NESTED LOOPS | | | | | | | | | 5 | 4 | 5 | 1 | 4 | 1 | 90 | 3989690 | 3 | | | | (#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 | |
1121 | 9/10/2013 3:30 | HASH JOIN | SEMI | | | | | | | | 6 | 5 | 6 | 1 | 3 | 2 | 54 | 3989094 | 2 | | AL."TOACCOUNTID"="TOACCOUNTID" | | (#keys=1) "AL"."FROMACCOUNTID"[NUMBER,22] | 1 | |
1121 | 9/10/2013 3:30 | INDEX | FULL SCAN | SP | ACCOUNTLINK_AK1 | AL@SEL$1 | | INDEX (UNIQUE) | ANALYZED | | 7 | 6 | 7 | 1 | 1 | 18 | 252 | 107 | 1 | | | | AL."FROMACCOUNTID"[NUMBER,22], "AL"."TOACCOUNTID"[NUMBER,22] | 1 | SEL$5DA710D3 |
1121 | 9/10/2013 3:30 | VIEW | | SYS | VW_NSO_1 | VW_NSO_1@SEL$5DA710D3 | 11 | VIEW | | | 8 | 6 | 7 | 2 | 2 | 18 | 234 | 107 | 1 | | | | TOACCOUNTID[NUMBER,22] | 1 | SEL$683B0107 |
1121 | 9/10/2013 3:30 | CONNECT BY | NO FILTERING WITH START-WITH | | | | | | | | 9 | 8 | 8 | 1 | | | | | | | TOACCOUNTID=PRIOR "FROMACCOUNTID" | TOACCOUNTID=56354162 | TOACCOUNTID[NUMBER,22], "FROMACCOUNTID"[NUMBER,22], PRIOR NULL[22], LEVEL[4] | | SEL$683B0107 |
1121 | 9/10/2013 3:30 | INDEX | FULL SCAN | SP | ACCOUNTLINK_AK1 | ACCOUNTLINK@SEL$3 | | INDEX (UNIQUE) | ANALYZED | | 10 | 9 | 9 | 1 | 1 | 18 | 252 | 107 | 1 | | | | ACCOUNTLINK.ROWID[ROWID,10], "FROMACCOUNTID"[NUMBER,22], "TOACCOUNTID"[NUMBER,22] | 1 | SEL$3 |
1121 | 9/10/2013 3:30 | TABLE ACCESS | BY INDEX ROWID | SP | TRXNS | T@SEL$1 | 2 | TABLE | ANALYZED | | 11 | 5 | 6 | 2 | 1 | 1 | 63 | 298 | 1 | | | | T."TRXNSID"[NUMBER,22], "T"."TRXNSTYPEID"[NUMBER,22], "T"."DESCRIPTION"[VARCHAR2,80], "T"."POSTDT"[DATE,7], "T"."TRXNSAMT"[NUMBER,22] | 1 | SEL$5DA710D3 |
1121 | 9/10/2013 3:30 | INDEX | RANGE SCAN | SP | TRXNS_ACCOUNTID_NIDX | T@SEL$1 | | INDEX | ANALYZED | 2 | 12 | 11 | 7 | 1 | 1 | 1 | | 224 | 1 | | AL."FROMACCOUNTID"="T"."ACCOUNTID" AND "T"."POSTDT">=SYSDATE@!-2 AND "T"."POSTDT"<=SYSDATE@! | | T.ROWID[ROWID,10], "T"."POSTDT"[DATE,7] | 1 | SEL$5DA710D3 |
1121 | 9/10/2013 3:30 | INDEX | UNIQUE SCAN | SP | ACCOUNT_PK | A@SEL$1 | | INDEX (UNIQUE) | ANALYZED | 1 | 13 | 4 | 5 | 2 | 1 | 1 | | 90 | 1 | | A."ACCOUNTID"="AL"."FROMACCOUNTID" | | A.ROWID[ROWID,10] | 1 | SEL$5DA710D3 |
1121 | 9/10/2013 3:30 | TABLE ACCESS | BY INDEX ROWID | SP | ACCOUNT | A@SEL$1 | 3 | TABLE | ANALYZED | | 14 | 3 | 4 | 2 | 1 | 1 | 29 | 168 | 1 | | | A."CLOSEDATE"<SYSDATE@! AND "T"."POSTDT">"A"."CLOSEDATE" | A."ACCOUNTNUM"[VARCHAR2,19] | 1 | SEL$5DA710D3 |
1121 | 9/10/2013 3:30 | INDEX | RANGE SCAN | SP | TRXNSTRACK_TRXNSID_NIDX | TRCK@SEL$6 | | INDEX | ANALYZED | 2 | 15 | 1 | 2 | 2 | 1 | 1 | 10 | 73 | 1 | | TRCK."TRXNSID"=:B1 AND "TRXNSTRACKREASONID"=1 | | TRCK."TRXNSID"[NUMBER,22], "TRXNSTRACKREASONID"[NUMBER,22] | 1 | SEL$6 |
Please help me in debugging this thanks!