哪位高人遇到过这个问题啊,我们用weblogic配置jdbc链接池访问oracle,但是每次weblogic启动后第一次访问的sql都非常慢
比如程序一个10个sql,这些sql第一次运行都要超过10秒,第2次就2秒以下了。
oracle是10g的。weblogic还配置了其他db的链接池,都没有问题,唯独外部db的池有这个问题。
因为这个外部db是在别的地方,不属于我们管理,也无法看执行计划,我们只知道都是view,而且view还是比较复杂的。
是否有结果集缓存的原因,使得第一次非常慢哪?但是结果集缓存是在11g才有的。

解决方案 »

  1.   

    第一次执行的sql要硬解析,比较耗费时间.
      

  2.   


    你说的是语法检查生成执行计划等这些事情对么?这些事情会花费8秒以上时间么?
    此外,发生这个问题的时候,db并没有重启过,那是外部数据库,不动的。只是我们每次重启weblogic以后,第一请求应用程序发现的。后面就正常的。
    硬解析应该是针对db全局的吧,不会是session级别的吧?
      

  3.   


    weblogic上还配置了其他几个连接池,不过是本地数据库,配置选项上都一样的,初期实例都是大于0的。看了cache相关的选项也没什么特别的
      

  4.   

    我想应该是数据缓存的原因,
    第一次慢那是正常的, 慢主要在两块: 一是SQL的分析(语法,语意,词法,等等,然后还要pin到share pool, 然后生成执行计划)都是要时间的. 二是IO的发生,读数据从磁盘到cache中.
    第二次这些就省了第一次查询, 会涉及到很多physical io, 第二次的话,,大部分block都在cache中, 不需要phisical io了.. 速度就快很多了.
      

  5.   

    那应该不是数据库本身的原因了,问问中间件专区呢.
    http://forum.csdn.net/SList/Middleware/
      

  6.   

    第一次慢是可以理解,但是差别10秒就让我怀疑了,从没遇到过差别这么大的。
    IO发生的说法不理解,oracle 10g没有结果集缓存,只是执行计划的缓存而已吧?
      

  7.   

    主要是某些数据可以从data buffer cache里取,减少了物理读,能提高一些速度.但是看你后面的描述 ,主要问题应该也不在这里.感觉还是要在中间件上找原因.
      

  8.   

    已经3年多没上csdn了,怎么论坛没有中间件或者weblogic区那?惭愧
      

  9.   

    和楼主遇到了同样的问题, 感觉楼上说的硬解析不太对,因为执行计划是在SGA的,第一次慢可以,以后的调用都应该很快。 但是,我这边在命令行直接加载context来调用方法来调试每次都是第一次很慢,后面就好了。所以我怀疑是否是连接池初始化的时候并没有缓存连接,而是相当于懒加载,在调用的时候才cache连接。 如果是这样的话只能在context初始化的时候建立一下连接了。。