本帖最后由 giszy 于 2010-04-01 17:00:20 编辑

解决方案 »

  1.   

    1、事务长度要合适;
    2、不要频繁提交(比如可插入1000行提交一次);
    3、查看一下CPU和IO的状态,瓶颈在哪。
      

  2.   

    这种情况估计是出现了等待写入日志组的现象。
    解决方法如下:
    1、不要频繁提交。
    2、有大对象的操作可以用nologging方式进行,如alter table test nologging; insert/*+append */ into test ……;
    3、增加日志组个数,适当增大日志组尺寸(比较麻烦,可以不用)。
      

  3.   

    关键在Update Image set BLOB字段 = 新值 where ...;极有可能是这个语句造成插入的时间越来越慢。当然,批量操作最好不要一个频繁commit。
      

  4.   

    bobfang说得比较对,我将Insert和Update两个语句合并了,可以直接插入数据而无需创建empty_blob()对象,事后发现的确插入效率提高了很多,但是问题还是存在,就是当入库数据量超过15幅之后,入库的效率依然很低,由初始的70秒到后来的230秒左右。tangren和etsilence说的修改事务长度考虑有道理,但是由于插入操作是封装好的函数不好修改;nologging方式好像必须跟insert/*+append */ into ... select一起使用才用效果,append方式添加记录对insert into ... values语句不起作用。我还测试了下,我将程序关闭后再启动入库操作,单幅入库的时间还是保持在230秒左右,重新启动数据库所在机器也不行,只有当我关闭数据库所在机器,然后再开机的时候,入库的效率才恢复到初始的70秒左右,很奇怪,感觉就像是数据库里面有个资源被占用没有得到释放,或者说是哪个参数需要设置一下,但是我在程序中已经将跟数据库相关的连接等资源都释放了。
      

  5.   

    感觉可能还是tangren和etsilence说的频繁提交事务导致的问题,还是先修改下看看,有结果再发上来!
      

  6.   

    问题解决了,还的确是因为频繁提交事务导致系统性能降低,我采取执行1000条记录commit一次,就没有出现上述所说的问题了。