前不久,无意中看到生产中一则TOP SQL,消耗资源较多,感觉有很大优化空间
SQL_ID 1agm6bmnhh609, child number 24
--------------------------------------
select *
from UMETRIP_EVENTLOG
where FLIGHTDATE = :1
and EVENTTYPE = 'GATE_CHG'
and PASSREASON = '-91000
TIME EXECU_D BUFFER DISK ET_D ROWS_PRO
------------ ------- ----------- ----------- --------- ------------
2020052004 2 229527 75055 205 4201
2020052101 2 288633 67290 166 4061
2020052202 2 226528 74570 181 4224
2020052203 2 205266 50359 134 4421
2020052303 2 206985 67949 156 4638
2020052306 1 152840 76679 196 1723
2020052601 2 213294 47103 125 3441
2020052603 2 209591 9441 36 3765
2020052810 2 248329 30198 91 4765
2020052813 2 271982 46553 123 4849
这条SQL执行次数并不多,却在AWR中进入了TOP 10 SQL,执行1-2次消耗了200000+的逻辑读,表记录数25042676行,NDV如下:
COLUMN_NAME NDV NUL NUM_NULLS DATA_TYPE LAST_ANALYZED HISTOGRAM
------------------------------ ---------- --- ---------- ------------ -------------------- ---------
CITYCODE 2379 Y 6073 VARCHAR2 2020-05-27 22:09:30 HEIGHT BA
DESTA 2365 Y 849 VARCHAR2 2020-05-27 22:09:30 HEIGHT BA
EVENTTYPE 59 Y 0 VARCHAR2 2020-05-27 22:09:30 FREQUENCY
EXTRAINFO 2189824 Y 14600645 VARCHAR2 2020-05-27 22:09:30 HEIGHT BA
FLIGHTDATE 1891 Y 723 VARCHAR2 2020-05-27 22:09:30 HEIGHT BA
FLIGHTDYNFIELD 45 Y 3651 VARCHAR2 2020-05-27 22:09:30 NONE
FLIGHTNO 58972 Y 0 VARCHAR2 2020-05-27 22:09:30 HEIGHT BA
ID 25042676 Y 0 NUMBER 2020-05-27 22:09:30 HEIGHT BA
INFOAFTER 713856 Y 336 VARCHAR2 2020-05-27 22:09:30 HEIGHT BA
INFOBEFOR 243808 Y 21175542 VARCHAR2 2020-05-27 22:09:30 NONE
INSERTTIME 626176 Y 0 DATE 2020-05-27 22:09:30 HEIGHT BA
ISUSED 2 Y 165 NUMBER 2020-05-27 22:09:30 FREQUENCY
PASSREASON 91 Y 3295111 NUMBER 2020-05-27 22:09:30 FREQUENCY
Plan hash value: 3303868666
-----------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 22722 (100)| |
|* 1 | TABLE ACCESS BY INDEX ROWID| UMETRIP_EVENTLOG | 72 | 7776 | 22722 (1)| 00:04:33 |
|* 2 | INDEX RANGE SCAN | UMETRIP_EVENTLOG_IDX2 | 17964 | | 5724 (1)| 00:01:09 |
-----------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("PASSREASON"=(-91000))
2 - access("EVENTTYPE"='GATE_CHG' AND "FLIGHTDATE"=:1)
filter("FLIGHTDATE"=:1)
目前SQL执行计划走了UMETRIP_EVENTLOG_IDX2的索引,EVENTTYPE/ID/CITYCODE/FLIGHTDATE,起到过滤作用的只有EVENTTYPE,而FLIGHTDATE只能起到过滤作用。
read more