================================================= start : 13-MAR-15 02.00.23.885 PM end : 13-MAR-15 03.00.48.168 PM snapid from 107851 to 107853 ================================================= ******************************************************** list sql with buffer gets per execution > 100000 ******************************************************** !!!! ########## Expensive SQL found ####### !!!! instance : 1 sql_id : drdbm833ack3c Buffer get : 260358 Execs : 1 BG/exec : 260358 Gets/row : 700 SQL TEXT : SELECT p.rec_id, p.CREATE_DATE, p.ordered_zzzyyy_type,p.qualified_zzzyyy_type,p.req_type,p.c_transid,p.status,p. ERR_CODE,p.ERR_DESC,p.SVC_STATE,p.IS_DOWNGRADED,p.ETF_WAIVE_FLAG FROM BL_XYZ_CHNG_PKG p WHERE p.req_type='R' AND p.status || ''='IN' AND p.jrs_indicator IN ('1','2','3') and p.c_transid IN (SELECT MAX(C_TRANSID) FROM BL_XYZ_CHNG_PKG GROUP BY rec_id) ...After checking this sql, I've realized this may be a classical example where using analytic function can save resource.
Original one -- Full table Scan on the same table twice 259k gets
SQL> SELECT p.rec_id, 2 p.CREATE_DATE, 3 p.ordered_zzzyyy_type, 4 p.qualified_zzzyyy_type, 5 p.req_type , 6 p.c_transid,p.status, 7 p.ERR_CODE,p.ERR_DESC,p.SVC_STATE,p.IS_DOWNGRADED,p.ETF_WAIVE_FLAG 8 FROM 9 xyzu.BL_XYZ_CHNG_PKG p 10 WHERE p.req_type='R' 11 AND p.status || ''='IN' 12 AND p.jrs_indicator IN ('1','2','3') 13 and p.c_transid IN 14 (SELECT MAX(C_TRANSID) FROM BL_XYZ_CHNG_PKG GROUP BY rec_id) 15 ; 242 rows selected. Execution Plan ---------------------------------------------------------- Plan hash value: 3808252951 ------------------------------------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | ------------------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 1613 | 127K| | 83112 (3)| 00:16:38 | |* 1 | HASH JOIN | | 1613 | 127K| | 83112 (3)| 00:16:38 | |* 2 | TABLE ACCESS FULL | BL_XYZ_CHNG_PKG | 1613 | 107K| | 25463 (3)| 00:05:06 | | 3 | VIEW | VW_NSO_1 | 6443K| 79M| | 57578 (2)| 00:11:31 | | 4 | HASH GROUP BY | | 6443K| 86M| 148M| 57578 (2)| 00:11:31 | | 5 | TABLE ACCESS FULL| BL_XYZ_CHNG_PKG | 6459K| 86M| | 25154 (2)| 00:05:02 | ------------------------------------------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 1 - access("P"."C_TRANSID"="$nso_col_1") 2 - filter("P"."REQ_TYPE"='R' AND "P"."STATUS"||''='IN' AND ("P"."JRS_INDICATOR"='1' OR "P"."JRS_INDICATOR"='2' OR "P"."JRS_INDICATOR"='3')) Statistics ---------------------------------------------------------- 95 recursive calls 0 db block gets 259618 consistent gets 267154 physical reads 0 redo size 10348 bytes sent via SQL*Net to client 261 bytes received via SQL*Net from client 4 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 242 rows processedRewrite with rank() over partition by construct - one Full table scan with 129k
SQL> SELECT rec_id, 2 CREATE_DATE, 3 ordered_zzzyyy_type, 4 qualified_zzzyyy_type, 5 req_type , 6 c_transid,status, 7 ERR_CODE,ERR_DESC,SVC_STATE,IS_DOWNGRADED,ETF_WAIVE_FLAG 8 from 9 ( 10 SELECT p.rec_id, 11 p.CREATE_DATE, 12 p.ordered_zzzyyy_type, 13 p.qualified_zzzyyy_type, 14 p.req_type , 15 p.c_transid,p.status, 16 p.ERR_CODE,p.ERR_DESC,p.SVC_STATE,p.IS_DOWNGRADED,p.ETF_WAIVE_FLAG, 17 rank() over ( partition by rec_id order by c_transid desc ) rank 18 FROM 19 xyzu.BL_XYZ_CHNG_PKG p 20 WHERE p.req_type='R' 21 AND p.status || ''='IN' 22 AND p.jrs_indicator IN ('1','2','3') 23 ) A 24 where rank=1; 242 rows selected. Execution Plan ---------------------------------------------------------- Plan hash value: 3870177004 -------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1613 | 546K| 25464 (3)| 00:05:06 | |* 1 | VIEW | | 1613 | 546K| 25464 (3)| 00:05:06 | |* 2 | WINDOW SORT PUSHED RANK| | 1613 | 107K| 25464 (3)| 00:05:06 | |* 3 | TABLE ACCESS FULL | BL_XYZ_CHNG_PKG | 1613 | 107K| 25463 (3)| 00:05:06 | -------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("RANK"=1) 2 - filter(RANK() OVER ( PARTITION BY "REC_ID" ORDER BY INTERNAL_FUNCTION("C_TRANSID") DESC )<=1) 3 - filter("P"."REQ_TYPE"='R' AND "P"."STATUS"||''='IN' AND ("P"."JRS_INDICATOR"='1' OR "P"."JRS_INDICATOR"='2' OR "P"."JRS_INDICATOR"='3')) Statistics ---------------------------------------------------------- 1 recursive calls 0 db block gets 129827 consistent gets 127794 physical reads 0 redo size 10184 bytes sent via SQL*Net to client 261 bytes received via SQL*Net from client 4 SQL*Net roundtrips to/from client 1 sorts (memory) 0 sorts (disk) 242 rows processed