共计 3191 个字符,预计需要花费 8 分钟才能阅读完成。
这篇文章主要介绍使用 Exp 和 Expdp 导出数据的性能有什么区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
1. 前言
数据备份对信息系统的安全运行至关重要,我们的用户中,使用 RMan 或第三方专业备份软件的越来越多,但是很多用户仍然保留了传统的 Exp 作为备份策略的一部分,主要是由于这种备份方式简单易用,而且恢复到其他机器上也很方便,所以,虽然有其他的备份方式,但是 Exp 方式仍然会同时使用,甚至还有不少的用户只有这种备份方式 (可能因为他们觉得掌握其他技术太复杂)。
随着用户的数据量增长,Exp 导出方式存在的问题也日渐突出,主要就是耗时长,有的甚至超过 3 个小时,加上常见的后台自动作业:汇总表的计算,自动费用的计算,统计信息的收集等工作,使一个晚上的时间安排越来越紧张。
有没有办法提高 Exp 执行的性能呢?以前我做过一些试验,查阅了很多资料,总结过一些经验,最近拿到了一个用户的近 300G 数据,再次进行了一系列大数据量的导出对比试验,发现几个参数的设置对 Exp 导出耗时的影响较大,经过优化后,Exp 导出的性能得到了较大提升,但是与 Expdp 相比,仍然是后者要快得多,下面将试验情况和相关知识做一个介绍,以便我们在帮助用户制定备份策略时参考。
2. 试验情况
2.1 试验环境
硬件:
:至强 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 试验方法
在相同环境下,试验 4 种不同的导出数据的方式的耗时
1)
使用 Exp 常规路径导出,不加参数优化
2)
使用 Exp 直接路径导出,不加参数优化
3)
使用 Exp 直接路径导出,参数优化
4)
使用 Expdp 导出,参数优化
2.3 试验结果
方式
耗时
说明
Exp 常规路径,未优化
5 小时 15 分
不加参数
Exp 直接路径,未优化
2 小时 38 分
direct=y
Exp 直接路径,优化
1 小时 40 分
direct=y recordlength=65535
buffer=104857600
Expdp,优化
59 分
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 分钟左右的耗时。
按照上面的参数优化设置,下面给出一个导出脚本示例:
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 爱好者的测试结果来看,确实差别非常大。
以上是“使用 Exp 和 Expdp 导出数据的性能有什么区别”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!