一次查询一条数据花费6分钟的SQL优化到0.05s的经历

环境:阿里云ECS Oracle 11.2.0.1 ADG
最近数据库晚上在0点到2点之间的报表任务job运行时间明显上升,如下是截取7天快照DB TIME所看到的情况:






虽然并没有影响到日终的进行,但是由于上次造成alert出现snapshot too old的事件以后,还是觉得需要看一下为好,索性就找了当天的0点到1点的awr报告看了一眼:


我同时查看了之前几天的,都如上图所示,鹤立鸡群,很明显,2c7ut81kqjf4k 这个sql_id语句执行了300多秒,执行一次,一开始我以为查的数据比较多,加上SQL语句有些问题,会很慢,然后就将对应的sql_id的awr报告下载:


执行300多秒,愣是没有查出什么数据来。这里我就开始怀疑,SQL查询数据可能数量极少,但是时间很久。然后就手动执行了这条SQL语句:
原始SQL语句如下:
   
   
   
select distinct a.id, a.busistate, a.processinstanceid
  from ACCEPAPPLYINFO a, VBPMEXTTASK c, VBPMPROCESSINFO d
 where c.ACTIVATIONTIME =
       (select max(t.activationtime) activationtime
          from VBPMEXTTASK t
         where t.PROCESSINSTANCEID = d.id
         group by t.PROCESSINSTANCEID)
   and a.applysubno = d.BUSINESSKEY
   and d.PROCESSINSTANCEID >= c.PROCESSINSTANCEID
   and a.busistate in ('09', '17')
   and a.DATASOURCE not in ('2', '4')
   and (select businessdate from smsysdate) - trunc(c.ACTIVATIONTIME) >=
       (select decode(durationunit,
                      '01',
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值