查看: 9671|回复: 12

【大话IT】提高Oracle存储过程抽取效率

[复制链接]
论坛徽章:
4
优秀写手
日期:2014-04-04 06:00:14秀才
日期:2015-09-10 09:29:01秀才
日期:2016-12-21 16:55:07娜美
日期:2018-02-09 12:04:16
发表于 2014-11-17 17:28 | 显示全部楼层 |阅读模式
背景:数据库的时间戳不准确,现在采用补漏数据。具体如下:
1、使用
insert /*+append */ into ttt() select * from xxx@dbl  where gcsj >trunc(sysdate-7) and gcsj < trunc(sysdate)

7分钟抽取数据700万左右

2、跟正式比对,如果没有,数据导入到某张表,

使用过程
for F in (select * from ttt) LOOP
    v_gcxh := F.gcxh;
    select count(1)
      into v_count
      from (SELECT * FROM yyy) t
     where t.gcxh = v_gcxh;
    if v_count = 0 then
      v_sum      := v_sum + 1;
      V_KSSJ     := sysdate;
      V_KKBH     := F.KKBH;

      INSERT INTO tmp
        ()
      VALUES
        ()
    end if;
    if mod(v_sum, 10000) = 0 then
      INSERT INTO T_GCSJ
        (KSSJ, JSSJ, RZCJKSSJ, RZCJJSSJ, IN_ROWS, UP_ROWS, BZ1, BZ2, BZ3)
      VALUES
        (V_KSSJ,
         SYSDATE,
         V_RZCJKSSJ,
         V_RZCJJSSJ,
         V_SUM,
         '0',
         '',
         '',
         'ZYK_TMP');
      commit;
    end if;
  end loop;
   INSERT INTO T_GCSJ
      (KSSJ, JSSJ, RZCJKSSJ, RZCJJSSJ, IN_ROWS, UP_ROWS, BZ1, BZ2, BZ3)
    VALUES
      (V_KSSJ,
       SYSDATE,
       V_RZCJKSSJ,
       V_RZCJJSSJ,
       V_SUM,
       '0',
       'SUM',
       '',
       'ZYK_TMP');
    commit;

这个中时间为半个多小时,请问如何优化次过程


3、使用datastage数据将其导入到正式表中
8分钟左右

认证徽章
论坛徽章:
3
优秀写手
日期:2014-10-28 06:00:13暖羊羊
日期:2015-03-04 14:54:572015年新春福章
日期:2015-03-06 11:59:47
发表于 2014-11-17 21:03 来自手机 | 显示全部楼层
优化的关键在于循环那里!

使用道具 举报

回复
认证徽章
论坛徽章:
3
优秀写手
日期:2014-10-28 06:00:13暖羊羊
日期:2015-03-04 14:54:572015年新春福章
日期:2015-03-06 11:59:47
发表于 2014-11-17 21:06 来自手机 | 显示全部楼层
最好跟踪一下!做下sql_trace吧!

使用道具 举报

回复
论坛徽章:
18
奥迪
日期:2014-01-23 17:13:08喜羊羊
日期:2015-05-29 07:20:492015年新春福章
日期:2015-03-06 11:59:472015年新春福章
日期:2015-03-04 14:55:13马上加薪
日期:2014-10-22 11:08:29itpub13周年纪念徽章
日期:2014-10-10 07:09:53生肖徽章:蛇
日期:2014-06-19 17:10:12生肖徽章:龙
日期:2014-06-19 17:10:12 2014年世界杯参赛球队: 德国
日期:2014-06-13 10:14:37优秀写手
日期:2014-05-14 06:00:20
发表于 2014-11-17 21:37 | 显示全部楼层
try merge or bucket collection operation.

使用道具 举报

回复
论坛徽章:
540
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2014-11-17 22:52 | 显示全部楼层
不要用游标,直接用ttt和yyy外连接,判断缺失数据。

使用道具 举报

回复
论坛徽章:
4
优秀写手
日期:2014-04-04 06:00:14秀才
日期:2015-09-10 09:29:01秀才
日期:2016-12-21 16:55:07娜美
日期:2018-02-09 12:04:16
 楼主| 发表于 2014-11-18 11:56 | 显示全部楼层
本帖最后由 gh_95533 于 2014-11-18 14:10 编辑

执行计划

执行计划

使用道具 举报

回复
论坛徽章:
4
优秀写手
日期:2014-04-04 06:00:14秀才
日期:2015-09-10 09:29:01秀才
日期:2016-12-21 16:55:07娜美
日期:2018-02-09 12:04:16
 楼主| 发表于 2014-11-18 14:15 | 显示全部楼层
执行较慢,执行analyze index ttt_index validate structure语句在index_stats中没有找到任何数据。

使用道具 举报

回复
论坛徽章:
4
优秀写手
日期:2014-04-04 06:00:14秀才
日期:2015-09-10 09:29:01秀才
日期:2016-12-21 16:55:07娜美
日期:2018-02-09 12:04:16
 楼主| 发表于 2014-11-18 15:12 | 显示全部楼层
执行计划
2014-11-18_151119.png

使用道具 举报

回复
论坛徽章:
4
优秀写手
日期:2014-04-04 06:00:14秀才
日期:2015-09-10 09:29:01秀才
日期:2016-12-21 16:55:07娜美
日期:2018-02-09 12:04:16
 楼主| 发表于 2014-11-18 15:55 | 显示全部楼层
下面是我新sql语句的执行计划,是否可行???
执行计划3.png

使用道具 举报

回复
论坛徽章:
4
优秀写手
日期:2014-04-04 06:00:14秀才
日期:2015-09-10 09:29:01秀才
日期:2016-12-21 16:55:07娜美
日期:2018-02-09 12:04:16
 楼主| 发表于 2014-11-18 16:30 | 显示全部楼层
执行了一下啊,跑了15分钟还没有跑完。。。。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表