ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 高水位线下空闲块过多导致的SQL性能问题

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

原创 Linux操作系统 作者:OGG-01161 时间:2012-12-31 16:39:11 0 删除 编辑
     最近在给某客户数据库做巡检,从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博客 ” ,链接:https://blog.itpub.net/27571661/viewspace-751945/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: ERROR OGG-01028
请登录后发表评论 登录
全部评论

注册时间:2012-08-11

  • 博文量
    55
  • 访问量
    157564