上一编讲到了逻辑备份原理,对于imp,在其导入的过程中,
1 既然是顺序读,那么可以一次读多点,减少了读的次数,从而提高效率。在这方面buffer是一个不错的选择。imp的参数列表中有一个buffer参数。这个buffer参数的设置不是来源于database的,而是来源于IMP命令。
2可以通过增加db_cache_size的大小,来提高DBW0的效率;适当增加log_buffer的大小,来提高LOGWR的效率。
3建立索引放到imp后再建立,减少DBW0的时间
4如果数据库为归档模式,IMP前调整为非归档模式,从而减少LOGWR的压力.
5上面imp语句中没有使用commit=y的参数,如果对大表进行imp操作应该使用commit=y参数(数据分批量提交),原因:如果导入执行很长时间,对生产产生较大影响,有可能imp操作被中断,这个中断将导致这个大事物的回滚;回滚会占用更多时间;或者直接采用数据泵的方式导出导入(数据泵默认不需要commit参数);
在exp数据导出过程中,
知道采用direct path可以提高导出速度。所以,在使用exp时,就可以采用直接路径模式。这种模式有2个相关的参数:DIRECT 和RECORDLENGTH参数。
1 DIRECT参数定义了导出是使用直接路径方式(DIRECT=Y),还是常规路径方式(DIRECT=N)。常规路径导出使用SQL SELECT语句从表中抽取数据,直接路径导出则是将数据直接从磁盘读到PGA再原样写入导出文件,从而避免了SQL命令处理层的数据转换过程,大大提高了导出效率。在数据量大的情况下,直接路径导出的效率优势更为明显,可比常规方法速度提高三倍之多。
2 和DIRECT=Y配合使用的是RECORDLENGTH参数,它定义了Export I/O缓冲的大小,作用类似于常规路径导出使用的BUFFER参数。建议设置RECORDLENGTH参数为最大I/O缓冲,即65535(64kb)。其用法如下:
exp userid=system/manager full=y direct=y recordlength=65535 file=exp_full.dmp log=exp_full.log
在数据泵导入导出中:
数据泵与exp/imp 来说性能有很大的提高,其中影响最大的就是paralle。可以这么来看:expdp/impdp=exp/imp+direct moe + paralle. 所以,使用数据泵,要想提高速度,就要设置并行参数。这个并行主要是服务器中CPU个数,如果要给导入一个合理的PARALLEL值,个人认为是可用的CPU数(不管你是虚拟的还是多核的)的60-70%左右的值是一个比较好的值。当然如果有可能还是测试一下来决定一个最优的值吧。这个测试会在下一篇做一个测试。本文参考Dave和wwwlh相关文档,在此表示谢意。
另外数据导出导入时去掉表分析也会加快速度,在exp中statistics=none,expdp中exclude=table_statistics。