请教一下 我这边 有一个存储封装了 表数据的采集任务
循环执行 
insert /*+ APPEND*/into t (t.1,t.2)select  /*+PARALLEL(a,4)*/  a.1,a.2,nvl((select c.2 from c where a.1 = c.1),1) from a where 1=1;大部分执行都很快 就是有一张表 7W多笔的数据执行了 50多分钟,同样7W多笔数据的表1秒钟就执行完了,这个问题出在哪里?

解决方案 »

  1.   

    1,先看看SQL查询块不快
    2,可能因为你加了并发,当时你的CPU实用率过高导致遇到瓶颈,需查看下CPU情况
    3,你用了APPEND,可能你的表a高水位比较高或者表碎片比较大(行链接、行迁移导致),建议重导下表或者重建表
      

  2.   


    1.看了下查询速度7W多笔的数据1秒不到查询完成;
    2.看了服务器上这条执行时间的CPU,使用率并不高7%左右
    3.每次执行前都会 DROP TABLE  a   CASCADE CONSTRAINTS PURGE;再create table;
      

  3.   


    1.查询的错了,执行的是 select count(*) from (select a.1,a.2 from table); 应该不准确
      

  4.   

    50多分钟的时候查看 v$session_Wait视图,看看里面有什么等待事件,再做针对性的分析
      

  5.   

    一看就知道(select c.2 from c where a.1 = c.1), 这个有问题了
    把这个写成left join  跑的飞起
      

  6.   

    这种sql只适合查询,不适合全表关联的,不然每一条记录都要遍历一次C表,性能耗在这里