sqlldr使用细节

最近要使用sqludr导出数据库中的数据,再通过sqlldr导入目标数据到数据库中去。
由于数据量上亿,性能上进行了测试!
参数介绍:http://dbua.iteye.com/blog/1570018

1.help=yes可以获取更多参数。

 sqluldr2 help=yes

2.rows、readsize、bindsize之间的关系

rows – 常规路径导入时:指绑定数组中的行数;直接路径导入时,指一次从数据文件只读取的行数,该参数同时受bindsize制约,如果rows*每行实际占用大小超出bindsize最大可用值,则rows自动降低达到bindsize最大可用值(每次提交的记录数,默认: 常规路径 64, 所有直接路径)
bindsize – 为绑定数组指定的最大可用空间,用来存贮一次读取的rows的记录,该值不能太小,至少要放入一条逻辑记录 但设置太大也没什么作用。 每次提交记录的缓冲区的大小(字节为单位,默认256000)
readsize—- 缓冲区大小,默认值:1048576单位字节,最大不超过20m,该参数仅当从数据文件读取时有效,如果是从近制文件读取数 据,则默认为64k

rows和bindsize会相互制约,bindsize大小会因不同数据,所占的行数会不一样。如:bindsize=256000,数据中每行占2560,则对应的行数是100。此时,但rows>100时,每次读的数量仍然为100行,当rows<=100时,每次读的行数则为rows。

readsize会制约前面两者(每次读的数量),当readsize小于“每次读的所需的大小”时,每次读的行数以readsize为准。如:每次读100行,占256000B,当readsize=25600B,则一次只会读10行。当readsize=2560000B时,每次仍读100行。

因为不同表,每行所占的字节不一样。所以,建议处理是只要设置bindsize和readsize(缓冲区和每次读取大小)来确定行数,无需设置rows。缓冲区是每次读取大小的整数倍,大数据时,一般不超过10倍,数据量小可不考虑。

以下经过测试,得到的较优的数据

===文件数据量4w ===rows=20000(无用设置,受bindsize限制) readsize=1024000000 bindsize=512000000
每次读的行数==2564
Elapsed time was:     00:00:02.16
CPU time was:         00:00:01.16
===文件数据量10w =====readsize=102400000 bindsize=102400000
每次读的行数==5173
Elapsed time was:     00:00:04.74
CPU time was:         00:00:02.78
===文件数据量200w ===readsize=1024000000 bindsize=512000000
每次读的行数==25869
Elapsed time was:     00:01:34.81
CPU time was:         00:00:56.87

数据量和每次读的行数关系图,大概是一个:
数据量和每次读的行数关系图

3、启用多线程multithreading

multithreading=true

4、direct 参数设置

direct - 使用直通路径方式导入,不走buffer cache,通过direct path api发送数据到服务器端的加载引擎,加载引擎按照数据块的格式处理数据并直接写向数据文件,因此效率较高(默认FALSE)

direct可以提高很大的效率,但是可能会造成以下后果:
注意:使用direct=true会跳过主键、约束,会导致数据严谨性缺失。
注意:使用direct=true会跳过索引,有索引的表不建议使用。使用了,可以后期添加索引。

  • 单个200w数据文件的导入设置
readsize=1024000000 bindsize=512000000 multithreading=true
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值