有一个informix数据库的vm虚机,原有数据库表空间分布在4个chunk,路径为:/home/informix/dbs/datachunk1(其他分别为datachunk2-4) ,因/ 目录空间不足,于是新加一块盘,创建了一个datavg,新分配给文件系统挂载 /data ,用来新增chunk,语句如下: onspace -a datadbs -p /data/datachunk5 -o 0 -s 10240000 ,onstat -d 查看状态都是没问题的。于是测试数据导入,当时load 一个千万级的数据文件,想看下新加的datachunk5是否被使用,但后来事务日志满报错了(:long transaction aborted. 12204: RSAM error:Long transaction detected.),在load过程中发现原来的datachunk1和的datachunk3在减少,但Load失败后空间也没有恢复。网上查了资料,将事务日志关闭后重新load成功,而且看到使用了datachunk5(onstat -d 发现free变小了)。
现在有以下疑问:希望能得到高手的解答,十分感谢。
问题一:不扩/目录 ,而是将chunk放在新建的 /data , chunk与原路径不一致,是否会影响数据库i/o之类的性能?
问题二:为什么load因事件日志满失败后,datachunk1和3减少了没有恢复,而select查询导入的表却是0条记录,说明数据没有导入,那datachunk1减小了的size哪去了?
问题一:不扩/目录 ,而是将chunk放在新建的 /data , chunk与原路径不一致,是否会影响数据库i/o之类的性能?
答:
1、关闭数据库,COPY原来在CHK文件到/data中,但是需要创建一个软连接,指向/home/informix/dbs/datachunk1
ln -s /data/datachunk1 /home/informix/dbs/datachunk1
2、重启数据库,这样是可以的
至于IO的性能,需要去衡量你新加入的磁盘IOPS高还是用来的磁盘IOPS高。
问题二:为什么load因事件日志满失败后,datachunk1和3减少了没有恢复,而select查询导入的表却是0条记录,说明数据没有导入,那datachunk1减小了的size哪去了?
答:
你在带日志的情况下load,引起了长事务,load操作需要回滚的,所以你select就是0条了。
至于datachunk1和3减少了没有恢复的问题,我怀疑是extent没有释放,反正长事务回滚之后数据量也是0条,你可以drop表重建即可。
建议:
1、了解一下长事务的概念;
2、了解一下dbsapces\chunk\表的关系