ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 累计的力量,delete全表扫描导致程序运行时间过长。

累计的力量,delete全表扫描导致程序运行时间过长。

原创 Linux操作系统 作者:wei-xh 时间:2010-07-01 12:07:56 0 删除 编辑
昨天晚上熬夜加班到3点多,主要时间耗在一个做账业务上,这个业务是三个月前开始的,前几次做都还是比较快的不到一个小时,可是昨天晚上竟然花费了4个多小时。我手头工作太多,当时没顾得上找原因。今天早上分析了一下那个时段的AWR,原来祸首是个DELETE语句。
DELETE ZC67 WHERE BAZ203 = :B2 AND BAC100='0' AND AAE140 = :B1 ;
执行计划
----------------------------------------------------------
Plan hash value: 318370648
-----------------------------------------------------------------------------
| Id  | Operation          | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | DELETE STATEMENT   |        |     1 |    19 |  2447   (2)| 00:00:30 |
|   1 |  DELETE            | T_ZC67 |       |       |            |          |
|*  2 |   TABLE ACCESS FULL| T_ZC67 |     1 |    19 |  2447   (2)| 00:00:30 |
-----------------------------------------------------------------------------
统计信息
----------------------------------------------------------
          4  recursive calls
          0  db block gets
      10989  consistent gets

这个语句循环的调用,执行了接近6万次。


1.GIF

整个包的CPU时间是13389,可这个语句就运行了12774秒。(这个语句是包调用的)。
解决办法是对BAZ203增加索引,这个字段是个序列产生的,每条记录都唯一。区分度非常好。

之所以前几次比较快是由于数据量还不大,随着数据量变大,运行时间长也就在所难免了。

[ 本帖最后由 wei-xh 于 2010-7-1 12:00 编辑 ]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22034023/viewspace-666809/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE组成员,DBGeeK用户组发起人。曾在DTCC、ORACLE技术嘉年华、Gdevops等公开场合做过数据库技术专题分享,2017年应Oracle邀请在世界最大的数据库会议OOW上做技术分享。组织翻译了《拨云见日,解密Oracle ASM内核》一书。

注册时间:2009-07-04

  • 博文量
    422
  • 访问量
    2425322