您的位置:首页 > 其它

EXP EXPDP数据导入本地性能测试

2016-05-12 10:25 309 查看
EXP,EXPDP数据导入本地性能测试

from: http://f.dataguru.cn/thread-311247-1-1.html
本文编写背景:

大家都知道,Oracle数据库有两种比较方便的导出导入工具,那就是exp/imp和expdp/impdp。熟悉此工具的人也会了解到,exp/imp的使用 (服务器端和客户端都可以执行,并且备份文件可以在客户端产生);expdp/impdp的使用 (服务器端和客户端都可以执行,备份文件只能存在服务器里面)。

但鉴于导出导入工具的特点,我们就想能否通过expdp将远端数据库数据导入到本地库中呢?当然可以!下面我们就一起来做一个测试吧。

测试说明:

目的:将远端数据库服务器(IP为65)的数据导入到本地(IP为67)dmp文件中

其中用到服务器(65)一个用户(user_exp)的一张表做测试(t_exp)

Create tablespace tbs_exp datafile ‘D:tbs_exp.dbf’ size 10240m autoextend off;

Create user user_exp identified by user_exp default tablespace tbs_exp;

Grant connect,resource,unlimited tablespace to user_exp;

Conn user_exp/user_exp

create table t_exp as

select * from user_tablespaces;

declare

begin

for i in 1 .. 10000000 loop

insert into t_exp

(tablespace_name, block_size, initial_extent,MIN_EXTENTS )

values

('tablespace_name',0,0,i);

end loop;

commit;

end;

/

1.EXP工具数据导入本地步骤

直接通过以下代码将服务器数据导入到本地:

exp user_exp/user_exp@orcl_65 file=d:exp_01.dmp log=d:exp_01.log tables=(t_exp)

2.EXPDP工具数据导入本地步骤

第一步:本地建立导出用户

Create user db_exp identified by db_exp;

Grant connect,resource,create database link to db_exp;

第二步:本地创建directory,并授权导出用户使用

在操作系统上创建direxp目录

create or replace directory DIR_EXP as 'D:direxp';

grant read,write on directory DIR_EXP to db_exp;

第三步:,并创建db link 链接

-- Create database link

create database link to_exp_65

connect to user_exp identified by user_exp

using '(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.48.1.65)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SID = orcl)

)

)';

Select 1 from dual@to_exp_65;

第四步:导出代码

expdp db_exp/db_exp@orcl_67 directory=DIR_EXP dumpfile=expdp_01.dmp logfile=expdp_01.log tables=(t_exp) network_link=to_exp_65

其他备注:

Db_exp 本地用户,用来连接远端数据库服务器

Dir_exp 本地db_exp用户下 的 directory 用户本地指定expdp写入目录,这里是D盘direxp文件夹

To_exp_65 本地db_exp用户下的 db link ,用来连接远端数据库服务器

3.EXP,EXPDP工具数据导入本地性能对比

性能测试结果:

Exp导出过程如下:

C:\documents and SettingsAdministrator>prompt $P$G$T$G

C:\documents and SettingsAdministrator>16:10:55.37>

C:\documents and SettingsAdministrator>16:11:05.92>exp user_exp/user_exp@orcl_6

5 file=d:exp_01.dmp log=d:exp_01.log tables=(t_exp)

Export: Release 10.2.0.1.0 - Production on 星期三 10月 12 16:11:07 2011

Copyright (c) 1982, 2005, Oracle. All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

服务器使用 AL32UTF8 字符集 (可能的字符集转换)

即将导出指定的表通过常规路径...

. . 正在导出表 T_EXP导出了 10000007 行

成功终止导出, 没有出现警告。

C:\documents and SettingsAdministrator>16:17:51.04>

用时:6分钟46秒

Expdp导出过程如下:

C:\documents and SettingsAdministrator>16:22:15.25>expdp db_exp/db_exp@orcl_67

directory=DIR_EXP dumpfile=expdp_01.dmp logfile=expdp_01.log tables=(t_exp) netw

ork_link=to_exp_65

Export: Release 10.2.0.1.0 - Production on 星期三, 12 10月, 2011 16:22:16

Copyright (c) 2003, 2005, Oracle. All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

启动 "DB_EXP"."SYS_EXPORT_TABLE_01": db_exp/********@orcl_67 directory=DIR_EXP

dumpfile=expdp_01.dmp logfile=expdp_01.log tables=(t_exp) network_link=to_exp_65

正在使用 BLOCKS 方法进行估计...

处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA

使用 BLOCKS 方法的总估计: 336 MB

处理对象类型 TABLE_EXPORT/TABLE/TABLE

. . 导出了 "USER_EXP"."T_EXP" 285.8 MB 10000007 行

已成功加载/卸载了主表 "DB_EXP"."SYS_EXPORT_TABLE_01"

******************************************************************************

DB_EXP.SYS_EXPORT_TABLE_01 的转储文件集为:

D:\DIREXPEXPDP_01.DMP

作业 "DB_EXP"."SYS_EXPORT_TABLE_01" 已于 16:23:35 成功完成

Cocuments and SettingsAdministrator>16:23:36.46>

用时:1分钟21秒

另:Expdp导入到远程数据库服务端 所耗时间如下:

C:\documents and SettingsAdministrator>16:27:40.92>expdp user_exp/user_exp@orcl

_65 directory=DATA_FILE_DIR dumpfile=expdp_02.dmp logfile=expdp_02.log

Export: Release 10.2.0.1.0 - Production on 星期三, 12 10月, 2011 16:27:41

Copyright (c) 2003, 2005, Oracle. All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

启动 "USER_EXP"."SYS_EXPORT_SCHEMA_01": user_exp/********@orcl_65 directory=DAT

A_FILE_DIR dumpfile=expdp_02.dmp logfile=expdp_02.log

正在使用 BLOCKS 方法进行估计...

处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA

使用 BLOCKS 方法的总估计: 336 MB

处理对象类型 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

处理对象类型 SCHEMA_EXPORT/TABLE/TABLE

处理对象类型 SCHEMA_EXPORT/TABLE/INDEX/INDEX

处理对象类型 SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT

处理对象类型 SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS

处理对象类型 SCHEMA_EXPORT/TABLE/COMMENT

. . 导出了 "USER_EXP"."T_EXP" 285.9 MB 10000007 行

已成功加载/卸载了主表 "USER_EXP"."SYS_EXPORT_SCHEMA_01"

******************************************************************************

USER_EXP.SYS_EXPORT_SCHEMA_01 的转储文件集为:

E:ORACLEPRODUCT10.2.0DB_1DEMOSCHEMASALES_HISTORYEXPDP_02.DMP

作业 "USER_EXP"."SYS_EXPORT_SCHEMA_01" 已于 16:24:52 成功完成

C:\documents and SettingsAdministrator>16:27:59.70>

用时:0分钟19秒

可见,从远端服务器导数据到本地,使用数据泵也是可以完成的,同时效率还是远远高于普通的exp导出

------------------------------------------------------------------------------------------------------------------------------

EXP常规模式、EXP直接路径模式和EXPDP三种方式导出的性能对比
from: http://blog.163.com/card_2005/blog/static/11781036820098225542220/
1.首先是EXP的常规路径导出:
exp zhejiang/zhejiang file=/data1/zj_regular.dmp buffer=20480000
常规EXP导出方式执行了1小时24分钟。
2.直接路径导出方式:
exp zhejiang/zhejiang file=/data1/zj_direct.dmp buffer=20480000
recordlength=65535 direct=y
直接路径导入用时18分钟,比常规路径导出速度有一个明显的提高。

3.数据泵的导出速度。
expdp zhejiang/zhejiang dumpfile=zj_datapump.dp directory=d_test schemas=zhejiang
数据泵的导出时间仅用了14分钟,比直接路径导入方式还快了20%多。而且观察三个导出文件的大小可以发现,导出速度越快对应的文件也越小,其中数据泵的导出方式得到的文件要比EXP方式小将近1.5G。
IMP和IMPDP导入性能对比
1.IMP的导入速度:
imp zhejiang/zhejiang file=/data1/zj_regular.dmp full=y buffer=20480000 log=/data1/zj_regular.log
IMP导入花费了3小时17分钟,
2.IMPdp的导入速度:
impdp zhejiang/zhejiang DUMPFILE=zj_datapump.dp DIRECTORY=d_test FULL=y LOGFILE=zj_datapump.log
数据泵的导入操作居然花了3个小时8分钟的时间,和IMP的导入速度十分接近,看来并非所有情况下都像Oracle描述的那样,数据泵的导入比普通导入效率有大幅度的提高。
上面一篇文章的测试中发现IMPDP的导入速度和IMP导入速度相差无几。而Oracle在介绍数据泵的时候,提到IMPDP的导入速度最高是IMP的10倍。不过好在IMPDP还是可以优化调整的,那就是通过设置PARALLEL来提高IMPDP的并行度。
首先还是看一下CPU的数量:
SQL> show parameter cpu
由于数据库服务器的CPU个数为2,下面尝试设置PARALLEL为2来进行导入
impdp zhejiang/zhejiang DUMPFILE=zj_datapump.dp DIRECTORY=d_test FULL=y LOGFILE=zj_datapump.log parallel=2
采用并行度为2的导入方式,发现速度果然提高了很多。并行度为1的导入速度是3小时8分钟,而现在用了不到2个半小时。
由于并行度设置不应该超过CPU数的2倍,因此尝试平行度3和4的导入,导入时间和并行度2十分接近。看来已经无法再使用通过提高并行度的方法来提高性能了。
1.先看直接导出的性能:
$ expdp zhejiang/zhejiang directory=d_test dumpfile=zhejiang.dp
整个导出操作大概用了14分半,
2.尝试使用并行度2进行导出,这时仍然设置一个导出的数据文件:
$ expdp zhejiang/zhejiang directory=d_test dumpfile=zhejiang_p2_1file.dp parallel=2
整个导入过程不到14分钟,不过这个性能的提升实在不是很明显。不过这是有原因的,由于设置了并行度,两个进程在同时执行导出操作,但是二者要将导出的数据写入同一个数据文件中,因此必然会导致资源的争用
3.仍然使用并行度2,但是同时设置两个数据文件再次检查导出性能:
$ expdp zhejiang/zhejiang directory=d_test dumpfile=zhejiang_p2_2file1.dp,zhejiang_p2_2file2.dp parallel=2
这次导出仅仅用了10分半,导出的效率大大的提高。
4.测试一下并行度4,分别导出到4个数据文件中:
用了9分钟整导出完成,设置成并行度4仍然可以获得一定的性能提升,但是并不明显了,这主要是由于整个性能的瓶颈已经不是单个进程的处理能力,多半性能的瓶颈已经变成了磁盘IO瓶颈,此时单单靠增加并行度已经无法明显提升性能了。

----------------------------------------------------------------------------------------------------------------------------------

expdp和exp性能对比与原理分析

......

exp和expdp原理对比

1.exp/imp客户端程序,受网络,磁盘的影响;impdp/expdp服务器端程序,只受磁盘的影响

2.假设文件把文件导出在服务端,exp常规方式是使用SELECT的方式查询数据库中的数据,是需要通过buffer cache并通

过sql的语句处理层再转移至exp的导出文件(即要经过sga,pga才传输到客户端,而exp直接路径则是直接从磁盘上将数

据转移至exp的导出文件,所以速度更快;而expdp是exp的升级版,相当于exp + direct mode + parallel(可能对导

出文件还进行了压缩,这是从导出文件的对比结果发现的,具体不清楚)。所有从总的来说,expdp比exp提供了并行的

方式(写入多个导出文件)

impdp的并行机制也让其比imp快很多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: