优化exp/imp导入导出速度大全 1、exp 我们知道采用direct path可以提高导出速度。所以,在使用exp时,就可以采用直接路径模式。这种模式有2个相关的参数:DIRE

优化exp/imp导入导出速度大全

 

1、exp

 

  我们知道采用direct path可以提高导出速度。所以,在使用exp时,就可以采用直接路径模式。这种模式有2个相关的参数:DIRECT和RECORDLENGTH参数。

 

       DIRECT参数定义了导出是使用直接路径方式(DIRECT=Y),还是常规路径方式(DIRECT=N)。常规路径导出使用SQL SELECT语句从表中抽取数据,直接路径导出则是将数据直接从磁盘读到PGA再原样写入导出文件,从而避免了SQL命令处理层的数据转换过程,大大提高了导出效率。在数据量大的情况下,直接路径导出的效率优势更为明显,可比常规方法速度提高三倍之多。

 

  和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

 

 

 

一些限制如下:

 

·    直接路径不能使用在tablespace-mode

 

·    直接路径不支持query参数。query只能在conventional path模式下使用。

 

·    如果exp版本小于8.1.5,不能使用exp导入有lob字段的表。 不过现在很少有有8版本的数据库了。这点可以忽略掉了。

 

·    buffer选项只对conventional path exp(传统路径)有效。对于直接路径没有影响。对于直接路径,应该设置RECORDLENGTH参数。

 

·    对于直接路径下, RECORDLENGTH参数建议设成64k(65535)。这个值对性能提高比较大。

 

 

 

 

 

2、IMP

 

       Oracle Import进程需要花比Export进程数倍的时间将数据导入数据库。某些关键时刻,导入是为了应对数据库的紧急故障恢复。为了减少宕机时间,加快导入速度显得至关重要。没有特效办法加速一个大数据量的导入,但我们可以做一些适当的设定以减少整个导入时间。

 

·    IMP作了大量的跟普通方式一样的insert

 

·    IMP时候创建索引通常是logging的,产生了大量的undo和redo

 

 

 

提高IMP速度:

 

(1、不建议使用commit参数,因为当imp失败的时候,会导致很多后续的麻烦事儿

 

 

 

(2、增大buffer参数值,以便于一次读进更大的array

 

  Imp 参数BUFFER定义了每一次读取导出文件的数据量,设的越大,就越减少Import进程读取数据的次数,从而提高导入效率。BUFFER的大小取决于系统应用、数据库规模,通常来说,设为百兆就足够了。其用法如下:

 

  imp  user/pwd  fromuser=user1  touser=user2  file=/tmp/imp_db_pipe1  commit=y feedback=10000 buffer=10240000

 

 

 

(3、设置较大的初始化参数sort_area_size,以加快创建索引时候的排序速度,大内存启用ASMM/AMM之后感觉没有什么作用。

 

 

 

(4、使用INDEXES=N选项,导入数据之后再手工创建索引。

 

  前面谈到增加排序区时,说明Imp进程会先导入数据再创建索引。导入过程中建立用户定义的索引,特别是表上有多个索引或者数据表特别庞大时,需要耗费大量时间。某些情况下,需要以最快的时间导入数据,而索引允许后建,我们就可以使用INDEXES=N只导入数据不创建索引,从而加快导入速度。

 

  我们可以用INDEXFILE选项生成创建索引的DLL脚本,再手工创建索引。我们也可以用如下的方法导入两次,第一次导入数据,第二次导入索引。其用法

 

如下:

 

imp user/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 commit=y feedback=10000 buffer=10240000 ignore=y rows=y indexes=n

 

imp user/pwd fromuser=user1 touser=user2 file=/tmp/imp_index_pipe1 commit=y feedback=10000 buffer=10240000 ignore=y rows=n indexes=y

 

 

 

(5、增加 LARGE_POOL_SIZE

 

  如果在init.ora中配置了MTS_SERVICE,MTS_DISPATCHERS等参数,tnsnames.ora中又没有(SERVER=DEDICATED)的配置,那么数据库就使用了共享服务器模式。在MTS模式下,Exp/Imp操作会用到LARGE_POOL,建议调整LARGE_POOL_SIZE到150M。

 

检查数据库是否在MTS模式下:

 

  SQL>select distinct server from v$session;    ----如果返回值出现none或shared,说明启用了MTS。

 

 

 

(6、增大重作日志的大小

 

       以减少log switch的次数,也就是减少checkpoint次数,减少写磁盘的次数

 

 

 

(7、如果要往已经存在的表中追加数据

 

       那么有些情况下,比如表中存在位图索引,那么最好先删除索引,再导入。否则更新索引时会产生大量等待

 

 

 

注意:相关的几个参数

 

1、db_writer_processes imp导入时,如果吧上面的几点都做好了,还有一个影响最大的参数需要确认,那就是db_writer_processes,进程的个数,可以根据服务器的CPU酌情增加。速度可以大大提高。

 

2、 fast_start_mttr_target平均恢复时间,需要设置一个合理的数字,比如300秒。加快系统做检查点

 

 

 

其他需要注意的:

 

1. 目标数据库设置为非归档模式,当然停掉资料库同使用Nologging更好。

 

2. 导入的时候可以将索引和约束全部去掉( index , constraint , trigger等, drop或者disable掉所有的index以及相关的pk)

 

3. 在回滚段够大的情况下,不用加commit=y参数,频繁提交会影响效率;

 

4. 可以考虑使用DBLINK迁移,同样使用非归档模式,insert /*+ append*/ into select /*+ parallel(t,4)*/ * from t@dblink; ;

 

5. 迁移的过程中时刻注意各种空间是否够用(包括redolog,archivelog,undo segment,temp tbs);

 

6. 其他的因素干扰(Job, Trigger, Profile等等)。

 

7.Imp的时候buffer给的大一些。

 

8.imp没有parallel,想要用parallel那么就把原表输出成多个csv然后用sqlldr

 

9. 可以试试物化视图(Material View),如果是单独表空间的话,也可以考虑transport tablespace 。

 

10.可以考虑使用EXPDP和IMPDP。

 

11 为 table/index设置Nologging。

 

12. 同平台的话,按表空间传输,更快 .

 

13. 用的query子查询导出导入 (exp imp) .

 

14.ignore=y buffer=40960000,一秒至少应该是10w记录。

 

15.先创建表,删除索引信息。表设置并行度。如果可以分区的话。建议并行导入。即写多个脚本。每个脚本导入不同的分区内容。加上commit=y,导入完毕后并行创建索引,创建完毕后取消并行度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随与博主沟通,第一间进行解答!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值