优化Oracle IMP大数据量的几点总结

         资:由于工作需要,用oracle imp工具导入300W条记录到一张表中,使用的最简单的语句imp file=XXX.dmp full=y ignore=y.结果漫长的等待了快1个小时才导入完成。(硬件是Dell 2850 ,memory 8G)

     

         治:imp时加入buffer=4096000 使导入时间缩短为10分钟左右


         通:首先了解Oracle IMP的过程:如下图所示


优化Oracle IMP大数据量的几点总结_第1张图片

         1、import 进程读取DMP文件,准备数据并传输到数据系统中(这个过程是单线程的,纯顺序读IO,IO等待是这阶段慢的主要原因)

             2、数据库等待从import进程中输入的数据后插入表中,之后再次等待从import进程来的新数据。在插入数据库的过程中分别使用DBW0和LOGWR两个oracle进程处理。DBW0负责插入新的数据和建立索引。LOGWR负责写日志文件。

             从上述过程中,我们要提升IMP的效率,可以从几个方面来优化:

             a)在阶段1的过程中,既然是顺序读,那么可以一次读多点,减少了读的次数,从而提高效率。在这方面buffer是一个不错的选择。imp的参数列表中有一个buffer参数。这个buffer参数的设置不是来源于database的,而是来源于IMP命令。参见<exp/imp >。那么buffer参数的能设置的大小仅仅受限于操作系统的限制。

          b)在阶段2中,可以通过增加db_cache_size的大小,来提高DBW0的效率;适当增加 log_buffer的大小,来提高LOGWR的效率。

          c)将建立索引放到imp后再建立,减少DBW0的时间

          d) 如果数据库为归档模式,IMP前调整为非归档模式,从而减少LOGWR的压力

 

         鉴:Oracle IMP 默认的buffer为4096byte, 采用加大buffer的方法,提高imp效率,仅仅是一种手段而已,只有对整个过程的把握,才能清晰明白优化的思路.

你可能感兴趣的:(oracle,工作,cache)