易截截图软件、单文件、免安装、纯绿色、仅160KB

求助:为何Oracle数据库Insert记录的速度越来越慢

自己写了一个基于Oracle的数据入库存储的程序,实现对每幅影像数据进行分块后插入到指定的表中,其基本操作过程如下:

begin Transaction;
insert into Image values(值1,值2,值3,empty_blob());
Update Image set BLOB字段 = 新值 where ...;
commit;

开辟了三个线程来同时执行上述插入操作,对于一幅划分为25000块的影像插入的速度大概在90秒但是当连续插入超过大约15幅之后(每幅影像插入到单独的一个表中),单幅影像插入消耗的时间不断增大,一幅25000块的影像插入的时间上升到300多秒,不知是何缘故,小弟刚开始接触,望路过的各位大侠帮忙指点一二,是否有什么参数需要调整?

每插入一个数据块都执行了一次commit操作,每个新开辟的线程都是对应着一个新的数据库连接,线程执行完之后也通过Close()、Dispose()方式关闭了数据库连接。后来又尝试将整个插入过程定义成存储过程的形式,却发现多线程下执行存储过程的效率还不如不使用存储过程的方式。



自己顶一下,不知道是否跟频繁的创建事务、关闭事务有联系,望各位达人赐教!

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

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

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


相关问答:

Oracle 数据导出问题 - Oracle / 高级技术

exp user/password@dbname file=c:\table.dmp tables=jbitaku,jbitakum grants=y
然後按回車鍵 說明:  user/password@dbname  分別表示用戶名,密碼和服務名 f ......

oracle 10g安装到85%时报错

各位oracle高手,请教一下为什么oracle 10g在安装到百分之八十五的时候就报错不能继续安装?

内存多大? 重新下个数据库安装试试..

引用
各位oracle高手,请教一下为什么oracle 10g在安装到百分之八十五的时 ......

Oracle的blob字段问题 - Oracle / 开发

查了一天的blob,还是没理解到,我想在VC下存取二进制的文件,使用的是oo4o,照着帮助文档上面的写了写入数据库的代码,还是没写对,错误提示是this operation is not permitted on a empty LOB,这是什么意思啊?照 ......

求一sql语句 - Oracle / 开发

两个表
请看 "Persons" 表:
name banji shunxu
yiyang 01 1
yiyang 02 1
lili 01 2
  
接下来请看 "xueke" 表:
name kemu shunxu
yiy ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号