cooljean2008 发表于 2009-09-14 17:36

INFORMIX上大表更新时遇到一个问题(已解决)

由于工作需要,对一张表更新字段,表数据量大概在4,500W左右,为避免长事务,
我写了个EC,用的UPDATE游标,采用分段COMMIT的方式,每5000条提交一次,
在测试环境执行时,发现随着提交批数的累积,处理的速度越来越慢,更新的字段没有建立索引。
我想知道是什么原因造成的,应该如何解决?
我写了日志,跟踪每一次处理时间,大概每50批后,处理的时间会明显增长:
第批修改数据已提交,耗时秒
...
第批修改数据已提交,耗时秒
...
第批修改数据已提交,耗时秒
...
第批修改数据已提交,耗时秒
...
第批修改数据已提交,耗时秒
...
第批修改数据已提交,耗时秒
...
第批修改数据已提交,耗时秒
...

请教各位了!

[ 本帖最后由 cooljean2008 于 2009-9-15 14:33 编辑 ]

yhz6708 发表于 2009-09-15 12:03

我也遇到同样的问题,希望哪位高手指点一下,我用的是IDS 11.5 UC5 ,操作系统为CentOS 5.3 x86版本。

cooljean2008 发表于 2009-09-15 14:02

已找到问题所在,总结来了:
由于每次提交事务后,总是要重新OPEN游标(DECLARE时加入了WHERE条件),导致处理速度越来越慢。
将游标改成with hold方式就可以了,只OPEN一次,事务提交后游标仍然可以使用,这样每批的更新速度大致都在一个稳定时间段内。

yhz6708 发表于 2009-09-15 15:24

楼上能不能讲详细一些?我是使用dbaccess倒入数据的,该如何设置呢?

wolfop 发表于 2009-09-15 15:38

dbaccess导入先lock table in shared mode,就可以了。
真要提高速度,应该用HPLOAD,而且暂时关闭日志。

yhz6708 发表于 2009-09-15 15:43

多谢,我先试试看。

yhz6708 发表于 2009-09-16 16:05

虽然比以前快了一些,感觉还是比较慢,尽管我启用了行压缩。

liaosnet 发表于 2009-09-17 10:06

原帖由 wolfop 于 2009-9-15 15:38 发表 http://bbs3.chinaunix.net/images/common/back.gif
dbaccess导入先lock table in shared mode,就可以了。
真要提高速度,应该用HPLOAD,而且暂时关闭日志。
HPL 不需要关闭日志功能~~因为它自己会把表改为只读,且写很少的日志...
页: [1]
查看完整版本: INFORMIX上大表更新时遇到一个问题(已解决)