【问题标题】:SQL*Plus CSV Export slower than SQL DeveloperSQL*Plus CSV 导出比 SQL Developer 慢
【发布时间】:2021-08-09 03:30:55
【问题描述】:

我正在尝试将一个中等复杂的查询导出到 CSV 文件。在开发过程中,我一直通过 SQL Developer 手动执行此操作,但现在我正在设置一个自动化流程,因此我转而使用 SQL*PLUS 进行导出。出于某种原因,SQL*PLUS 版本明显 比手动 SQL Developer 导出!怎么会这样?我认为 SQL*PLUS 的速度更快。

这是我使用的标题:

set termout off;
set verify off;
set flush off;
set pagesize 0;

column tm new_value file_name noprint
select to_char(sysdate, 'YYYYMMDD') || '_filename.csv' tm from dual ;

SET markup csv on;
set echo off;
set feedback off
-- set rowprefetch 1000
-- set arraysize 100

SPOOL &file_name

SELECT ....*querygoeshere*
spool off;
exit

我正在使用批处理脚本 sqlplus -l -F -M "CSV ON" username/pass@server @script.sql 从 Windows 机器调用此查询

我尝试打开 arraysize 并将其设置为 100 到 10,000 之间的任意值,尝试将 rowprefetch 设置为 1000 或关闭,并尝试在我的调用脚本中删除 -F 和 -M 标志。我的线条长度变化很大,所以我可能无法将线条尺寸设置为小于 7500,所以我没有这样做,但我发现没有其他文章有其他似乎有帮助的想法。

奇怪的是我可以看到文件加载速度较慢。如果我只是在资源管理器中刷新文件本身,那么来自 SQL Developer 的导出只会以比来自 SQL*PLUS 的速度快得多的速度增长。当我点击刷新时,正在进行的 SQL Developer 导出速度超过 100k/s;正在进行的 SQL*PLUS 导出通常每 100k 至少需要几秒钟。这些都发生在同一台机器上。有什么不同??我错过了什么?

【问题讨论】:

  • sqlplus 一般输出到终端屏幕。即使您正在假脱机到一个文件,您也可能还输出到终端输出,这将是减慢您速度的一点。您可以尝试将 sqlplus 的输出通过管道传输到单独的文件,或者尝试使用ctrl-O 关闭输出,如果您使用的是支持该功能的系统,并查看是否可以提高速度
  • 嗨,Jad,我的印象是 set termout off; 阻止了它;不是这样吗?如果不是那么好了解管道。 ctrl-0 是什么?
  • ctrl-(letter o) ...它会关闭屏幕的输出...如果它没有在终端窗口中显示任何内容,我可能是错的,但这不会让我感到惊讶如果是导致问题的终端 IO

标签: oracle sqlplus


【解决方案1】:

事实证明,经过几天的不同设置测试,更好的方法是切换到SQLcl。它支持 sql*plus 脚本,但似乎工作得更快;与 SQL Developer 的导出速度相当,甚至更好(这是我一开始就希望的性能!)。切换到它,并将我的脚本中的 SET markup csv on; 替换为 SET SQLFORMAT CSV 保持相同的结果,但导致 大量 速度提高而没有进一步的变化。显然我从 sql*plus 开始是错误的,应该从 SQLcl 开始。

值得注意的是,许多讨论 sql*plus 更快的问题、博客和论坛似乎都是针对早期版本的 oracle。在撰写本文时,在 2021 年年中,SQLcl 似乎可能是提高速度的更好方法。或者至少,我的情况非常相似。

【讨论】:

  • 我也有同样的想法,但似乎 SQLcl 缺少一些新 SQLPlus 已经拥有的设置选项:SP2-0158:未知的 SET 选项“标记”SP2-0158:未知的 SET 选项开始“lobprefetch ...” SP2-0158:未知 SET 选项以“rowprefetch ...”开头,无论我通过什么数组大小(并且应该接受那个),它似乎总是通过 arrayzise=15(默认),我不明白。 ..
猜你喜欢
  • 2015-05-07
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
相关资源
最近更新 更多