由于最近服务好慢,经过awrrpt.sql看到有5个SQL占用了大量的CPU资源,EM建议我改一下SQL语句,问题是:假设SQL有问题,要耗费大量的CPU,那为什么ORACLE不把这些语句执行完后,放到共享池让下次执行的时候会点呢?(EM报告大意说CPU花了大量时间在分析这些SQL语句上,不过分析完没有执行,)每次都要解释一次?我想把应用先关闭,然后手动执行这5条sql语句,看什么条件触发系统慢。

解决方案 »

  1.   

    SQL> select * from v$sgastat where upper(name)  like 'PX%';POOL         NAME                            BYTES
    ------------ -------------------------- ----------
    shared pool  PX msg pool struct               1088
    shared pool  PX subheap desc                   256
    shared pool  PX QC deq stats                  1480
    shared pool  PX server deq stats              1480
    shared pool  PX QC msg stats                  2288
    shared pool  PX subheap                    1044536
    shared pool  PX server msg stats              2288
    large pool   PX msg pool                   20480008 rows selected.
      

  2.   

    orale解析之前都会到你的share_pool里去查询这条语句,如果查询得到就可以避免再次解析,这个查找匹配的是非常严格的,所有都是建议使用的变量的时候使用绑定变量,减少相仿语句的解析。提高性能
      

  3.   

    但是同一样的SQL语句在其他分店的服务器上跑又没有问题啊~!