2016-02-01 341 views
1

当我在DBeaver中首次执行查询时,最多可能需要10-15秒才能显示结果。在SQLDeveloper中,那些查询只需要几分之一的时间。简单查询需要很长时间

例如: 简单的 “选择从表1列1” 语句

DBeaver:2006ms, 的SQLDeveloper:306ms

实施例2(约其他方式;因此世界上没有服务器端缓存): 简单“选择表2列1” 语句

的SQLDeveloper:252ms, DBeaver:1933ms

DBeavers状态框说:

  1. 取结果集
  2. 发现属性COLUMN1
  3. 查找属性COLUMN1
  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

可能是什么原因?

+1

我投票结束这个问题,因为我们不是DBeaver技术支持。如果您发现该产品较慢,请使用另一个产品,或者提交一个错误。 – Mat

+0

我并不是要求修复这个错误,如果它是一个。我在问是否有人经历过这件事,如果有人知道原因。 –

+0

这不是一个编程问题。如果您想讨论这一点,请使用聊天功能。 – Mat

回答

1

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

上的Oracle数据库,它查询目录表,如

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

版本3.6.10引入了一个选项来启用/禁用这些查询中使用的提示。禁用提示对我有很大的影响。该选项位于连接编辑对话框的Oracle Properties选项卡中。有关更多信息,请参阅issue 360 on dbeaver's github

+0

谢谢!我昨天看到了票,但是因为它是针对3.7版本发布的,所以我不得不等待。很好,它终于被解决了。 –

2

可了解的最佳方式是perfom的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查看等待事件和绑定变量。

运行查询

关闭conenction

这重要的是不要追查其他的东西。

检查两个跟踪文件上看到:

  • 进行什么语句

  • 什么行数是牵强

  • 什么时候在DB

  • 是经过其余时间客户端(IDE)负责

这应该为您提供足够的证据要求,如果一个IDE行为比其它的不同,或者简单发表的声明DB是不同的。