【问题标题】:Why there is the difference in Oracle PL/SQL response time within SQL Developer vs. SQL Plus?为什么 SQL Developer 与 SQL Plus 中的 Oracle PL/SQL 响应时间存在差异?
【发布时间】:2010-08-04 17:25:40
【问题描述】:

我有一个 PL/SQL 函数,它返回包含 28 列和 8100 行的游标。当我从 SQL Plus 执行该函数时,我立即得到了结果,而在 SQL Developer 中,我正在运行需要很长时间(大约 80 秒)的脚本。 Java 代码也是如此。当列数减少到 2 时,我在不到 4 秒的时间内得到了响应。有人可以解释一下这种情况下发生了什么吗?

【问题讨论】:

  • SQL Developer 也是用 Java 编写的,而 SQL*Plus 是本机代码。所以有一个线索。你的桌子是什么样子的?
  • 这是一个远程数据库吗?如果 SQL*Plus 与数据库在同一台服务器上运行,并且 SQL Developer 正在通过网络访问它,那么这可能是一个因素,特别是如果您有 LOB 数据,或者返回的列的大小未知(所以它必须分配比实际需要更多的内存和带宽)。大概您可以通过在本地运行 Java 版本来检查。也可以从 Java 中指定列大小,看看是否有帮助。
  • 显然不是,SQL Developer 除了用于与数据库智能交互的简化工具(称为:SQLPLUS)之外,还有更多层。可能会降低性能的东西只是在屏幕上显示数据。如果您让大量数据在您的窗口上滚动,它可能会严重变慢。在这种情况下,只需将另一个不相关的窗口(Windows 资源管理器、浏览器、..)全屏,直到查询完成。

标签: oracle plsql oracle10g sqlplus oracle-sqldeveloper


【解决方案1】:

最简单的实验是更改 SQL Developer 中的“SQL Array Fetch Size”,默认为 50。如果您看到将其增加到 500 的结果,那就是答案。

有趣的是,等效 SQLPlus 参数的默认值只有 15,但正如 APC 所说,SQLPlus 具有原生的优势。

如果更改“SQL Array Fetch Size”没有任何作用,接下来要看的是 JDBC 设置,SQL Developer 使用它而 SQL*Plus 没有。

【讨论】:

    【解决方案2】:

    除了我之前的好答案...

    一旦返回第一行,SQL*PLus 就会将数据直接发送回屏幕,而 SQL Developer 必须在显示记录之前找到要返回的结果集的大小。

    这可以解释为什么 SQL Developer 会出现延迟,尤其是在结果集很大或需要很长时间才能完全返回的情况下(例如,如果执行路径很复杂)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-07
      • 2015-09-16
      • 2021-09-11
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 2013-08-30
      相关资源
      最近更新 更多