简单查询需要很长时间

时间:2016-02-01 06:42:57

标签: sql oracle dbeaver

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

例如: 简单"从table1"中选择column1;声明

DBeaver:2006ms, SQLDeveloper:306ms

示例2(反过来;所以没有服务器端缓存): 简单"从table2"中选择column1;声明

SQLDeveloper:252ms, DBeaver:1933ms

DBeavers状态框说:

  1. 获取结果集
  2. 发现属性column1
  3. 查找属性column1
  4. 延迟绑定属性colummn1
  5. 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

    可能是什么原因?

2 个答案:

答案 0 :(得分: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 Properties选项卡中。有关详细信息,请查看issue 360 on dbeaver's github

答案 1 :(得分: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语句不同,这应该为您提供足够的证据来声明。