简单的查询需要很长时间

Simple queries take very long

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

例如: 简单 "select column1 from table1" 语句

DBeaver:2006 毫秒, SQLDeveloper:306 毫秒

示例 2(反过来;因此没有服务器端缓存): 简单 "select column1 from table2" 语句

SQLDeveloper:252 毫秒, DBeaver:1933 毫秒

DBeavers 状态框显示:

  1. 获取结果集
  2. 发现属性列 1
  3. 查找属性列 1
  4. 延迟绑定属性 colummn1

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

可能是什么原因?

获得洞察力的最佳方式是执行 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 的行为与其他行为不同,或者简单地说,发出的 DB 语句不同,这应该为您提供足够的证据。

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

在 Oracle 数据库上,它查询目录 table,例如

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

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