【问题标题】:Simple queries take very long简单查询需要很长时间
【发布时间】:2016-02-01 06:42:56
【问题描述】:

当我在 DBeaver 中第一次执行查询时,可能需要 10-15 秒才能显示结果。在 SQLDeveloper 中,这些查询只需要一小部分时间。

例如: 简单的“从 table1 中选择 column1”语句

DBeaver:2006 毫秒, SQL开发者:306ms

示例 2(其他方式;因此没有服务器端缓存): 简单的“从 table2 中选择 column1”语句

SQL 开发人员:252 毫秒, DBeaver:1933ms

DBeavers 状态框显示:

  1. 获取结果集
  2. 发现属性column1
  3. 查找属性column1
  4. 后期绑定属性column1

2、3 和 4 占用了大部分查询执行时间。

我正在使用 oracle 11g、SQLDeveloper 4.1.1.19 和 DBeaver 3.5.8。

http://dbeaver.jkiss.org/forum/viewtopic.php?f=2&t=1870

可能是什么原因?

【问题讨论】:

  • 我不是要求修复那个错误,如果它是一个。我在问是否有人也经历过,是否有人知道原因。
  • 这不是编程问题。如果您想讨论此问题,请使用聊天。
  • 我想我可以问一个关于“程序员常用的软件工具”的问题。不同意也没关系。
  • SQL Developer 仅获取结果的前 50(或 100?)行。也许 DBeaver 会获取所有这些?您的结果共有多少行?
  • 我试着把sqldeveloper改成100,和dbeaver一样,但是查询还是和以前一样快。

标签: sql oracle dbeaver


【解决方案1】:

DBeaver 在您的查询中查找与对象相关的一些元数据。

在 Oracle DB 上,它查询目录表,例如

  • SYS.ALL_ALL_TABLES / SYS.ALL_OBJECTS - 仅在连接后执行一次,用于您执行的第一个查询
  • SYS.ALL_TAB_COLS / SYS.ALL_INDEXES / SYS.ALL_CONSTRAINTS / ... - 我相信每次你查询一个以前没有使用过的表。

3.6.10 版引入了启用/禁用在这些查询中使用的提示的选项。禁用提示对我来说有很大的不同。该选项位于连接编辑对话框的 Oracle 属性选项卡中。请查看issue 360 on dbeaver's github 了解更多信息。

【讨论】:

  • 谢谢!我昨天看到了这张票,但由于它是针对 3.7 版发布的,我认为我不得不等待。太好了,终于解决了。
【解决方案2】:

获得洞察力的最佳方法是执行database trace

执行几次查询以消除缓存效果。

比在两个 IDE 中重复以下步骤

激活跟踪

ALTER SESSION SET tracefile_identifier = test_IDE_xxxx;

 alter session set events '10046 trace name context forever, level 12'; /* binds + waits */

提供 xxxx 来标识测试。您将看到此字符串作为跟踪文件名的一部分。

使用级别 12 查看等待事件和绑定变量。

运行查询

关闭连接

这很重要,不要追踪其他东西。

检查两个跟踪文件以查看:

  • 执行了哪些语句

  • 提取了多少行

  • DB 中经过了多少时间

  • 其余时间由客户端 (IDE) 负责

这应该为您提供足够的证据来证明一个 IDE 的行为是否与其他 IDE 不同,或者发布的 DB 语句是否不同。

【讨论】:

    猜你喜欢
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多