暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

从oracle快速提取到文本/CSV文件

askTom 2017-06-07
244

问题描述

嗨,Oracle大师!
我们遇到了奇怪的速度问题,需要您的帮助...

设置:
1) Oracle 11.2 Exadata机器,4个节点,

2) 几个linux服务器需要从Oracle提取到文本文件的大量数据 (10 gb)

3) 在linux服务器上通过从Oracle中选择一个表分区并保存到文本 (sqlplus假脱机或手工jdbc实用程序-无差异) 创建文本文件的平均速度为5 Mbytes/sec (40 Mbit/sec),而以太网能力是10倍 (通过简单的文件传输服务器之间的测试)。

4) 在oracle内部几秒钟内执行 “一个表分区” (7 Gb) 上选择创建表-因此这不是oracle磁盘速度问题。

问题:
1) 如何识别速度如此慢的原因 (sql * net?!),以及如何提高速度?

2) 是否有一些推荐的快速方法可以将大量文件提取到txt文件中?
也许并行 (如何)?

3) 这里
https://asktom.oracle.com/pls/apex/f?p=100:11:::NO::P11_QUESTION_ID:88212348059
汤姆关于快速出口的回答是:

你想要速度 -- 用一点c。

这里:

http://asktom.oracle.com/~tkyte/flat/index.html

你会发现按照速度的顺序:

utl_file (最慢,但当它 “足够快” 时真的很方便)
sqlplus
C

但是提到的链接不起作用...答案是什么?

这个?http://tkyte.blogspot.ru/2009/10/httpasktomoraclecomtkyteflat.html

出口到西尔克
https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:728625409049

专业 * C
https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:459020243348


4) 这里https://jonathanlewis.wordpress.com/2010/05/07/sqlnet-compression/
是关于sql * net压缩的讨论,效果很好。
在哪里可以找到文档和指南,以便在宽表上正确使用它 (超过1列),并且它可以与jdbc一起使用吗?

提前感谢!

专家解答

你可以在这里得到pro * c程序

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:459020243348

但是要查看其SQLNet,可以执行以下操作:

在exadata db节点之一上运行sqlplus,并在本地运行假脱机。并尝试设置以找到最有效的方法。例如:

从dual中选择systimetamp;
设置终止
设置arraysize 1000
设置行预取2
设置第0页
将trimspool设置在
假脱机c:\ temp \ test.out
选择 * 从...
阀芯关闭
设置termout on
从dual中选择systimetamp;

在我的笔记本电脑上,这使我可以在大约3分钟内卸载2500万行 (〜3gb),而我可以在几秒钟内对表进行全面扫描。因此,格式化和假脱机结果显然需要cpu和文件系统IO成本。

只要您的文件系统和网络支持它,最好的方法可能是并行作业。例如,我在3个并发流中运行了上述相同的测试,每个并发流仍然需要3分钟... 这意味着我实际上可以在3分钟内卸载7500万行 (9G)。

对输出进行排序应该会带来一些de-dup的好处,从而减少网络流量,但我怀疑这可能是文件格式化/写入时间,可以获得最大的收益。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论