oracle中我开发了一个存储过程,存储过程中涉及到十几个表,
其中就一个表有20多w条记录,其他表的记录都是几百条的,
该存储过程正常运行都是90多秒搞定,
可总是会出现这种情况:比如今天在oracle用了几个小时以后,
我RUN下上面开发的那个存储过程,要1000秒以上,二十多分钟,特别吓人,
我以为可能是缓冲区里面东西太多了,我重启机器,然后再RUN那个存储过程
结果还要1000多秒.我始终想不明白这什么原因,因为我不是DBA,只是
刚做ETL开发没多久,想不出来怎么办,希望在csdn上得到帮助

解决方案 »

  1.   

    图片就是今天RUN这个存储过程所花的时间,结果1700秒,害的下午客户许多的问题都没解决.
    我想这个问题不是SQL优化的问题了,因为正常跑的话,都是90多秒,
    所以这可能需要用到DBA管理上的知识了,希望朋友一赐良言
      

  2.   

    你的SQL被挤出了共享池区,造成 了硬解析和软解析
      

  3.   

    to java3344520:
    请问RUN存储过程时候,我怎么去执行explain plan?
      

  4.   

    在sql窗口按F5可以看到explain plan。
      

  5.   

    sqlplus set autotrace traceonly;运行sql 语句即可。
      

  6.   

    解决你这个问题,我认为你可以做ash报告,看最高5个事件是什么,然后再去查问题。在$ORACLE_HOME/rdbms/admin下面有ashrpt.sql启动sqlplus 
    SQL> start ashrpt.sql指定开始时间,结束时间,文件格式(text或者html),文件存放路径。然后查看结果。