高水位线下空闲块过多导致的SQL性能问题

     最近在给某客户数据库做巡检,从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

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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值