3

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

例如:简单的“select column1 from table1”语句

DBeaver:2006 毫秒,SQL 开发人员:306 毫秒

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

SQLDeveloper:252 毫秒,DBeaver:1933 毫秒

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

可能是什么原因?

4

2 回答 2

3

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

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

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

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

于 2016-06-14T23:13:35.547 回答
2

获得洞察力的最佳方法是执行数据库跟踪

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

比在两个 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 语句是否不同。

于 2016-02-01T10:35:33.247 回答