oracle优化案例(统计更新不及时导致执行计划不准确)

oracle优化案例(统计更新不及时导致执行计划不准确)


现场系统某数据库每天凌晨4点~6点在汇总数据时,经常因如下语句导致数据库负荷CPU达到100%,如下是经过分析定位 过程:

1、检查数据库表索引,发现该表有两个索引:

oracle优化案例(统计更新不及时导致执行计划不准确)_第1张图片

2、更新时使用的唯一索引,但执行计划却使用了与更新字段差异较大的索引;

oracle优化案例(统计更新不及时导致执行计划不准确)_第2张图片

 

3、分析执行计划,比对统计更新前后的执行计划差异;

收集统计更新前,计划如下:

oracle优化案例(统计更新不及时导致执行计划不准确)_第3张图片

收集统计更新后,计划如下:

oracle优化案例(统计更新不及时导致执行计划不准确)_第4张图片


和明显,数据库的consistent read 明显减少。

4、此问题存在的原因是数据更新前,需要将数据读入undo回滚段,因使用的索引有误,每次更新一条记录,需要读入整个事件端的数据,导致执行效率较慢,去掉索引idx01后,问题得以解决。

总结:因此并不是有索引了一定能执行效率快,可能因为统计信息不及时导致执行计划有误,影响执行效率。

结合业务角度,本次问题处理方法:

1、调整业务处理逻辑,将update环节去除;
2、增加收集周期,进行在凌晨4点每5分钟进行收集一次分区;
3、了解应用查询方法,如果没有compress_date,int_id进行关联查询,则去掉此索引字段。

UPDATE P_GSM_CELL_KPI_D SET INT_ID = :1, OMC_ID = :2, CITY_ID = :3, CITY_NAME = :4, COUNTRY = :5, MSC_NAME = :6, BSC_ID = :7, BTS_NAME = :8, ZH_LABEL = :9, VIP_TYPE = :10, ISNO_CAP_BTS = :11, ISNO_COVER_BTS = :12, SDCCH_CM_NUM = :13, SDCCH_AVAILABLE_NUM = :14, SDCCH_AVAILABLE_RATE = :15, SDCCH_ALLOT_NUM = :16, SDCCH_CALL_SEIZ = :17, SDCCH_REQ_NOHO = :18, SDCCH_CONG_NOHO = :19, SDCCH_CONG_RATE = :20, SDCCH_CALL_DROP = :21, SDCCH_CALL_DROP_RATE = :22, SDCCH_TRAFFIC_ALL = :23, TCH_CM_NUM = :24, TCH_AVAILABLE_NUM = :25, TCH_AVAILABLE_RATE = :26, TCH_REQ_NOHO = :27, TCH_CONG_NOHO = :28, TCH_CONG_NOHO_RATE = :29, TCH_REQ_WITHHO = :30, TCH_CONG_WITHHO = :31, TCH_CONG_WITHHO_RATE = :32, TCH_CALL_SEIZ = :33, TCH_SEIZ_WITHHO = :34, TCH_CALL_DROP = :35, TCH_DROP_NOHO_RATE = :36, TCH_DROP_WITHHO_RATE = :37, TCH_TRAFFIC = :38, HALF_TRAFFIC = :39, TRAFFIC_DROP_RATE = :40, TCH_ALLOT_NOHO_RATE = :41, TCH_ALLOT_WITHHO_RATE = :42, WIRELESS_ACCESSIBILITY = :43, PER_LINE_TRAFFIC = :44, RADIO_USED_RATE = :45, BAD_UP_INTERFERE_RATE = :46, GPRS_FLOW_M = :47, EDGE_FLOW_M = :48, PS_TRAFFIC = :49, PDCH_ADVANCE_DEL_NUM = :50, A_PDCH_DATA = :51, DL_TBF_SUCC_RATE = :52, DL_TBF_SUCC_NUM = :53, DL_TBF_ATT_NUM = :54, DL_TBF_DROP_RATE = :55, DL_TBF_DROP_NUM = :56, HIGH_CODE_RATE = :57, PDCH_COMPLEX_DEGREES = :58, GROUPS = :59, INTERFERE_1 = :60, INTERFERE_2 = :61, INTERFERE_3 = :62, INTERFERE_4 = :63, INTERFERE_5 = :64, PER_LINE_TRAFFIC_FZ = :65, PER_LINE_TRAFFIC_FM = :66, RADIO_USED_RATE_FZ = :67, RADIO_USED_RATE_FM = :68, HIGH_CODE_RATE_FZ = :69, HIGH_CODE_RATE_FM = :70, PDCH_COMPLEX_DEGREES_FZ = :71, PDCH_COMPLEX_DEGREES_FM = :72, BTSINDEXNO = :73, SECTOR = :74, PER_LINE_PS_TRAFFIC_FZ = :75, PER_LINE_PS_TRAFFIC_FM = :76, PER_LINE_PS_TRAFFIC = :77, TRX_COUNT = :78, SYS_FLAG = :79, CELL_TYPE = :80, VENDOR_ID = :81, VENDOR_NAME = :82, radio_used_rate_avg = :83, radio_used_rate_avg_fz = :84, radio_used_rate_avg_fm = :85 WHERE COMPRESS_DATE = :86 AND LAC = :87 AND CI = :88 AND BSC_NAME = :89 AND USERLABEL = :90

你可能感兴趣的:(oracle)