日期:2014-05-16  浏览次数:20466 次

提高 unload/load 性能的技巧
1.去掉数据库(表)日志,提高 load 速度
使用 load 工具进行批量装载时,如果数据库有日志,效率很低;尤其数据量较大时,还可能出现锁溢出、长事务等导致装载失败;对于失败的装载为保证数据一致性, IDS 自动回滚。回滚很耗时,尤其当长事务超出排它高水准线( LTXEHWM )时,其他用户的进程将被挂起,性能进一步恶化。这在联机事务处理环境中,势必影响其他业务的正常运行。为此,对有日志的数据库进行大量数据装载时,尽量去掉数据库日志,提高效率。
对于不能去掉日志的数据库环境,如果 Informix 版本为V9系列,可采用表级日志更改功能,即在装载时停止装载表的日志,装载结束后恢复表日志。
实施步骤:
1)  删除装载表的参照性约束及索引,只能对没有参照性约束及索引的表改变表级日志,所以在装载前先删除表索引及参照性约束,在装载完毕后重新创建。
2)  取掉目的表级日志
ALTER TABLE TABNAME TYPE(RAW)
3)  采用 LOAD 工具装载,创建索引及参照性约束
4)  增加目的表表级日志
ALTER TABLE TABNAME TYPE(STANDARD)
2.采用多进程,加速 unload/load 卸装速度
目前大多数用户数据库服务器配置较高,具有多个 CPU ,物理内存也较大,如果采用单进程卸装海量表,一方面运行速度缓慢,而另一方面大量系统资源闲置。为此,建议采用多进程,加速卸载速度。针对不同的实际情况,可采用不同方法启用多进程:
  将需要装卸的多张表分配到不同的进程中并发装卸,可减少整体装卸载时间;
  将海量表分配到多个进程中并发卸装,可减少海量表的卸载时间

需要说明的是,多进程适合运行在资源充分、负载较轻、具有多个 CPU 的主机上,而对资源较少,或负载已重的主机,启动多进程反而会降低性能,甚至影响其他应用程序的执行。一般来说,在多 CPU 机器上可启动少于物理 CPU 个进程,同时将分割的多个输入输出文件分布在不同设备上。
采用多进程装载海量表,如果装载的数据库有日志,情况较为复杂,需要特别注意锁溢出与长事务的出现,为此采用以下方法:
采用小事务,即每个进程每次装载的数据量适当小。
多进程并发装载同一表,防止锁溢出,表锁设置为页级锁,而非行锁。
去掉表的索引,加速每个进程事务的提交。
3.去掉索引,加速 load 装载速度
索引的根本目的是提高查询效率,但在插入操作时,索引的存在却严重地影响效率。当插入数据量非常大时,索引页重建量也很大,索引结点的分裂也相当频繁, I/O 操作显著增大。同时索引页的分裂,导致需要更多的内存空间来存放分裂前相同的数据量,从而降低缓存效率。
下列情况索引的存在甚至导致装载失败:采用多进程向有日志数据库装载数据时,如果表有索引,锁模式为页锁,则会由于锁碰撞导致装载失败。这是因为每个进程对其插入的索引页加锁,当其他进程插入的记录需要在加锁的索引页上重建的索引时,势必引起索引页上锁碰撞,导致装载失败。这种情况可将表的锁模式改为行锁得到解决,但对于海量数据而言,采用行锁模式不仅锁管理开销庞大,性能低下,而且很可能由于锁溢出而装载失败。所以去掉索引,保证装载的成功。