最近在给某客户数据库做巡检,从AWR报告中,看到如下一条语句:
SELECT ODS_WZ_MKPF.MBLNR, ODS_WZ_MKPF.MJAHR, ODS_WZ_MKPF.BLART, ODS_WZ_MKPF.CPUDT, ODS_WZ_MKPF.USNAM, ODS_WZ_MSEG.ZEILE, ODS_WZ_MSEG.BWART, ODS_WZ_MSEG.WERKS, ODS_WZ_MSEG.RSNUM FROM ODS_WZ_MKPF, ODS_WZ_MSEG, D_GS WHERE ODS_WZ_MKPF.MBLNR = ODS_WZ_MSEG.MBLNR AND ODS_WZ_MKPF.MJAHR = ODS_WZ_MSEG.MJAHR AND ODS_WZ_MKPF.CPUDT is not null AND ODS_WZ_MSEG.WERKS=D_GS.GS_ID AND ODS_WZ_MKPF.BLART='WA' AND D_GS.SJ_GS_ID !='DQ00' AND ODS_WZ_MSEG.WERKS!='0010' AND ODS_WZ_MKPF.TCODE2 !='MBST'
该语句引起我注意的是,Elapsed Time:99s ,CPU Time:43s ,执行次数:1
该语句一次执行时间为99秒,CPU时间为43秒,IO上花费54秒。第一反应该语句有可能做全表扫描。查看执行计划,SQL语句中涉及到的3张表都是做全表扫描,执行计划如下:
1 Plan hash value: 226315550 2 3 ------------------------------------------------------------------------------------------- 4 | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | 5 ------------------------------------------------------------------------------------------- 6 | 0 | SELECT STATEMENT | | 2177K| 199M| | 72381 (2)| 00:14:29 | 7 |* 1 | HASH JOIN | | 2177K| 199M| | 72381 (2)| 00:14:29 | 8 |* 2 | TABLE ACCESS FULL | D_GS | 125 | 1250 | | 3 (0)| 00:00:01 | 9 |* 3 | HASH JOIN | | 2317K| 190M| 145M| 72360 (2)| 00:14:29 | 10 |* 4 | TABLE ACCESS FULL| ODS_WZ_MKPF | 2317K| 119M| | 17676 (2)| 00:03:33 | 11 |* 5 | TABLE ACCESS FULL| ODS_WZ_MSEG | 5113K| 156M| | 36703 (2)| 00:07:21 | 12 ------------------------------------------------------------------------------------------- 13 14 Predicate Information (identified by operation id): 15 --------------------------------------------------- 16 17 1 - access("ODS_WZ_MSEG"."WERKS"="D_GS"."GS_ID") 18 2 - filter("D_GS"."SJ_GS_ID"<>'DQ00' AND "D_GS"."GS_ID"<>'0010') 19 3 - access("ODS_WZ_MKPF"."MBLNR"="ODS_WZ_MSEG"."MBLNR" AND 20 "ODS_WZ_MKPF"."MJAHR"="ODS_WZ_MSEG"."MJAHR") 21 4 - filter("ODS_WZ_MKPF"."BLART"='WA' AND "ODS_WZ_MKPF"."TCODE2"<>'MBST' AND 22 "ODS_WZ_MKPF"."CPUDT" IS NOT NULL) 23 5 - filter("ODS_WZ_MSEG"."WERKS"<>'0010') ,在查看三张表在有效字段上都建立的索引,但是在该语句中3张表的选择率低,全面扫描优于索引扫描;ODS_WZ_MSEG表返回的记录总大小为156M,但是该表段占用空间为1.19G,该表高水位线下可能存在大量的空数据块,ODS_WZ_MKPF表返回的总记录大小为51M,该表段占用空间为611M,全面扫描了大量的空数据快,建议用户重建这两张表,消除高水位线下面的大量空数据块,减少扫描空数据块消耗的CPU资源和IO等待并节省空间。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27571661/viewspace-751945/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/27571661/viewspace-751945/