首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlplus一次能提取多个行吗?

sqlplus一次能提取多个行吗?
EN

Database Administration用户
提问于 2019-09-17 00:47:12
回答 2查看 339关注 0票数 1

我们有一个任务每天运行,将查询的结果转储到CSV文件中--作为运行查询的sqlplus的标准输出。

记录的数量是数百万(别问),这份工作需要两个多小时。

为了改善时间,我编写了一个C程序(使用甲骨文的ofetch()调用),但是性能并没有改变.将会话数据单元(SDU)的大小提高到1GB!在客户端--不确定服务器会把它夹在哪里--没有帮助。

然后我做了更多的研究和找到ofen(),如果一次用于捕获多个行,可以显着地提高性能--并且改变了我的C程序来使用它。

一次取4K行,时间缩短到21分钟--减少10倍--这让人非常高兴。

在我们讨论在生产服务器上安装我的新可执行文件的麻烦之前,库存sqlplus也可以执行相同的多行抓取--如果提供了正确的命令行选项(S)?

可以吗?我们使用的是Oracle-11,但是,如果客户端版本12中有此功能,我们可以升级客户端.

EN

回答 2

Database Administration用户

回答已采纳

发布于 2019-09-17 02:03:15

SET ARRAYSIZE的默认值为15

“设置SQL*Plus一次从数据库中获取的行数。

有效值为1到5000。一个大的值会提高查询和子查询的效率,这些查询和子查询获取许多行,但需要更多的内存。大约超过100的值提供了很少的附加性能。除了提高效率外,ARRAYSIZE对SQL*Plus操作的结果没有任何影响。“

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqpug/SET-system-variable-summary.html#GUID-773AEA4E-060E-4C1E-B1A0-52F7DE084AE8

可以在sqlnet.ora (更改DEFAULT_SDU_SIZE )或连接字符串中进行额外的调整(包括SDU)。,这可以在tnsnames.ora中定义,但也可以将其作为一个versbose连接字符串的一部分,例如

代码语言:javascript
复制
sqlplus usr/pwd@(DESCRIPTION=(SDU=11280)(ADDRESS=(PROTOCOL=TCP)(HOST=svr)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=svc)))

输入usr、pwd、svr和svc https://docs.oracle.com/cd/E18283_01/network.112/e 10836/Perforce.htm的适当值。

票数 5
EN

Database Administration用户

发布于 2019-09-17 15:59:35

我觉得加里的建议是合理的。您还可以尝试使用utl_file或将数据直接写入文件的Perl脚本进行测试。我会犹豫写一个C程序,因为这将需要更高水平的专业知识来维护。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/248915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档