几次执行后查询速度很慢

时间:2015-04-29 13:05:35

标签: oracle oracle11g

我是oracle的新手,现在我因以下情况而变得疯狂。我正在使用oracle 11g数据库,并且很多时候我正在使用sql developer运行查询,这在5/6秒内正确执行,其他时间相反,相同的查询需要300/400秒执行。当查询使用300/400秒时,有一些工具可以调试发生的事情吗?

更新1  这是我的sql developer截图,问题似乎是直接路径读取温度

enter image description here

更新2 report

更新3 report2

有什么建议吗?

3 个答案:

答案 0 :(得分:9)

尝试设置跟踪。用户正在经历延迟的任何用户
作为sys:

GRANT ALTER SESSION TO USER;

当用户执行跟踪时:

ALTER SESSION SET EVENTS '10046 trace name context forever, level 8';
ALTER SESSION SET TRACEFILE_IDENTIFIER = "MY_TEST_SESSION";

产生错误/问题,然后作为用户测试:

ALTER SESSION SET EVENTS '10046 trace name context off';

系统找出跟踪文件的保存位置:

show parameter background_dump_dest;

转到该目录并查找包含MY_TEST_SESSION的.trc / .trm文件。例如ORCL_ora_29772_MY_TEST_SESSION.trc。
之后tkprof那些文件。在linux中:

tkprof ORCL_ora_29772_MY_TEST_SESSION.trc output=ORCL_ora_29772_MY_TEST_SESSION.tkprof explain=user/password sys=no

阅读tkprof文件,它将显示给定语句的等待时间 有关TKPROF的更多信息,请阅读this。有关启用/禁用跟踪的更多信息,请阅读this

答案 1 :(得分:3)

最好的工具是Real-Time SQL Monitoring。它不需要更改代码或访问操作系统。唯一的缺点是它需要许可Tuning Pack。

将这一行代码与另一个答案中的跟踪步骤进行比较。此外,输出看起来更好。

select dbms_sqltune.report_sql_monitor(sql_id => 'your sql id', type => 'text') from dual;

在11g及以后几乎不需要使用痕迹。

答案 2 :(得分:0)

此行为可能是由11gR2中的基数反馈错误/问题引起的。我有一个类似的问题。您可以使用_optimizer_use_feedback=false

关闭此功能来测试是否属于这种情况

同时尝试应用最新更新。