oracle imp过慢的解决办法

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://fbirdzp.blogbus.com/logs/98676185.html

性能测试或是压力测试工作的核心是测试环境的准备,其中就经常涉及到大数据量的导入导出。对于一个超过100GB的数据量的imp工作,完全参照生产环境的标准进行正规imp导入,有时候是很痛苦的事情。

测试环境涉及到大数据量的数据导入工作,其实是有一些好的经验的,尤其是在项目关键阶段,我们必须合理利用测试环境数据库安全级别相对较低的特点。

以测试环境如下条件的数据导入为例:

  • Oracle 11g RAC archive mode,归档模式
  • Oracle 11g RAC 仅有两块磁阵盘存储数据,读写性能一般
  • 有一个分区表有超过300GB的数据需要imp导入,每个分区有约5000万条记录
  • 这个表使用range partition(3天1个分区),并且有local索引

 

周五拿到dmp数据文件的时候,下班前就开始imp,后台运行后就闪人了,结果周末两天加上周一共出现了如下几个问题:

  • imp时没有设置buffer大小,结果导致报"imp-"错误提示,imp操作中断
  • imp时RAC各节点平均每2分钟产生1GB的archive log,归档空间扛不住,500GB的归档空间一晚上就满了,imp中断
  • 存放数据的表空间只有一个datafile,且并非bigfile,满了,imp又中断了
  • imp的速度很慢。两天了,基本上就见着盘很忙,没怎么见着数据成功导入的日志记录
  • 可能因为IO的性能确实很差,通过nmon,vmstat观察到的io表现,每秒写的速度不到20MB,Disk busy已经显示101%,XP20000的盘怂得真纯爷们!

 

后来,通过如下手段显著优化了imp的时间:

  • change RAC archive mode to noarchivelog mode
  • alter table t1 nologging;
  • alter table drop index
  • imp使用更大的buffer


原先三天没有导完的数据,现在半天就搞定了,而且剩下了很多维护archivelog的成本。

metalink上有一篇专门介绍imp调优的文章---《Tuning Considerations When Import Is Slow [ID 93763.1]》。

这里面讲到以下有用的知识点,通过以下几个方面的调整,将会显著提高imp的效率:

1. System级别的改变

  • 创建使用一个大的回滚段替代原有多个小的回滚段,大小是待导入表大小的50%足够。
  • 数据库修改为NOARCHIVELOG mode
  • 创建几组大的redo log size,越大越好,因为redolog越大,日志切换的越少。当看到alert.log里有类似 'Thread 1 cannot allocate new log, sequence 17, Checkpoint not complete'提示信息,这说明你需要更大的redo log size。
  • 如果条件允许,最好将rollback,datafile以及redo log file放在不同的磁盘上,避免IO争抢。
  • 确保imp操作时,没有其他IO操作,减少资源争抢。
  • 确保数据字典表里没有统计信息
  • 检查sqlnet.ora文件里,确保TRACE_LEVEL_CLIENT = OFF
  • 提高DB_BLOCK_SIZE的大小,这个需要全面考量,一旦创建db将不可再修改
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值