Exp和Expdp数据导出性能优化

更新时间:2023-11-07 02:59:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

使用Exp和Expdp导出数据的性能对比与优化

1.前言

数据备份对信息系统的安全运行至关重要,我们的用户中,使用RMan或第三方专业备份软件的越来越多,但是很多用户仍然保留了传统的Exp作为备份策略的一部分,主要是由于这种备份方式简单易用,而且恢复到其他机器上也很方便,所以,虽然有其他的备份方式,但是Exp方式仍然会同时使用,甚至还有不少的用户只有这种备份方式。

随着用户的数据量增长,Exp导出方式存在的问题也日渐突出,主要就是耗时长,有的甚至超过3个小时,加上常见的后台自动作业:汇总表的计算,自动费用的计算,统计信息的收集等工作,使一个晚上的时间安排越来越紧张。 有没有办法提高Exp执行的性能呢?以前我做过一些试验,查阅了很多资料,总结过一些经验,最近拿到了一个用户的近300G数据,再次进行了一系列大数据量的导出对比试验,发现几个参数的设置对Exp导出耗时的影响较大,经过优化后,Exp导出的性能得到了较大提升,但是与Expdp相比,仍然是后者要快得多,下面将试验情况和相关知识做一个介绍,以便我们在帮助用户制定备份策略时参考。

2.试验情况 2.1试验环境 硬件:

CPU :至强5405,4*2G 内存:DDR2,4G 硬盘:IDE 1T

软件:Windows+Oracle 10.2.0.3

数据:XX医院全库导入的ZLHIS10.30数据,原始共300G,经过收缩回滚表空间、临时表空间,以及一些表空间文件未使用的空间后,总共占用267G,其中包含了大量电子病历相关的LOB数据。

其他说明:由于该院使用时间较长,DB Control Repository包含了大量历史监控数据,表SYSMAN.MGMT_METRICS_RAW中的1300万条LOB格式数据,仅该表的导入耗时超过24小时,为了便于测试,清空了该表的数据。

2.2试验方法

在相同环境下,试验5种不同的导出数据的方式的耗时 1) 使用Exp常规路径导出,不加参数优化 2) 使用Exp直接路径导出,不加参数优化 3) 使用Exp直接路径导出,参数优化 4) 使用Expdp导出,参数优化

2.3试验结果

方式 Exp常规路径,未优化 Exp直接路径,未优化 Exp直接路径,优化 Expdp,优化 耗时 5小时15分 2小时38分 1小时40分 59分 说明 不加参数 direct=y direct=y recordlength=65535 buffer=104857600 parallel=3 dumpfile= expdp_0225_1.dmp,expdp_0225_2.dmp, expdp_0225_3.dmp 结果表明:

速度最快的是Expdp方式,而Exp方式经过参数优化后,相对于不加任何参数的情况,快了近3倍。

下面对相关的原理及参数进行详细说明。

3.原理说明

Exp默认是传统路径,这种模式下,是用Select来查询数据,然后写入buffer cache,在将这些数据写入evaluate buffer,最后传到Export客户端,再写入dump文件。

直接路径模式下,直接从硬盘读取数据,然后写入PGA,格式就是Export的格式,不需要转换,数据再直接传到Export客户端,写入dump文件。这种模式没有经过evaluation buffer,少了一个过程,导出速度提高也是很明显。

Exp没有并行参数,要进行并行导出,可以写多条命令同时导出,这种方式可用于特定的数据迁移情况,按表或表空间进行快速数据迁移。

Expdp是Oracle 10G上推出的一种先进的数据导出方式,比Exp有较大的性能提升,Expdp可以看成是Exp的升级版,相当于exp + direct mode + parallel。 Expdp缺省是直接路径方式,它有4种方式,另外3种分别是: 外部表模式(相当于Exp的常规路径导出); 数据文件拷贝模式(表空间传输);

网络链路导入(通过数据链路导出导入)

一般情况可以替代Exp,但是还无法完全替代,主要是它需要在数据库服务器上执行,而Exp可以在任何一台客户端上执行。另外,据测试,Expdp在导出大型分区表(1T以上)的时候,光是分析的时间就超过2个小时,而且存在一些BUG。所以,有些用户仍然会使用Exp来进行数据备份。

4. 参数优化 Exp相关参数

通过上面的分析,我们知道采用“直接路径”可以提高导出速度,这种模式重点说明2个参数:DIRECT和RECORDLENGTH参数。

DIRECT参数定义了导出是使用直接路径方式(DIRECT=Y),还是常规路径方式(DIRECT=N)。常规路径导出使用SELECT语句从表中抽取数据,评估后再写入,而直接路径导出则是将数据直接从磁盘读到PGA再原样写入导出文件,从而避免了SQL命令处理层的数据转换过程,大大提高了导出效率。

BUFFER参数用于设置了读取记录的缓存的大小,以字节为单位,即在array中最大数量的记录,该参数只对常规路径模式导出有效。

RECORDLENGTH参数是跟DIRECT=Y配合使用的参数,它定义了Export I/O缓冲的大小,作用类似于常规路径导出使用的BUFFER参数。建议设置RECORDLENGTH参数为最大I/O缓冲,即65535(64kb)。

需要强调是即使用直接路径导出模式,其中涉及LOB对象的表只会通过传统模式导出,所以,DIRECT=Y时,除了设置RECORDLENGTH参数之外,也需要设置BUFFER参数,一般情况可设置为104857600(100M),这一点是网上很多优化文章所忽略的。 另外,还可以修改Oracle初始化参数Multiple Block Read来提交读取数据的性能,经测试,效果不是很明显,前面的测试环境下,可减少10分钟左右的耗时。

按照上面的参数优化设置,下面给出一个导出脚本示例:

exp userid=sys/his@zyyy full=y direct=y recordlength=65535 buffer=104857600 file=F:\\zyyy\\exp20120218.dmp log=F:\\zyyy\\exp20120218.log feedback=10000

Expdp相关参数

这里只说明两个参数:Parallel和Dumpfile

Parallel参数指明了导出并行度,根据CPU的个数进行设置,缺省是1,如果不设置,导出性能与Exp的直接路径导出模式差不了多少,就没有发挥出它的优势。

Dumpfile参数可配合Parallel参数指定多个导出文件,用于减少并发写入时的IO争用。

结合这两个参数,下面给出一个导出脚本示例: SQL>create directory dump_dir as 'F:\\data\\zyyy'; Cmd:

expdp sys/his@zyyy full=y directory=dump_dir parallel=3

dumpfile=expdp_0225_1.dmp,expdp_0225_2.dmp,expdp_0225_3.dmp logfile=expdp_0225.log

5.小结

如果你仍然习惯使用Exp方式,如果要减少耗时,最好采用直接路径方式,并且设置RECORDLENGTH和BUFFER两个参数的值,可以大大提高导出性能。 如果你掌握了Expdp方式,使用合适的Parallel参数,实现快速导出,更重要的是Impdp的性能提升才是数据泵模式的真正优势所在,从一些Oracle爱好者的测试结果来看,确实差别非常大。

本文来源:https://www.bwwdw.com/article/d972.html

Top