我是oracle的新手,现在我因以下情况而变得疯狂。我正在使用oracle 11g数据库,并且很多时候我正在使用sql developer运行查询,这在5/6秒内正确执行,其他时间相反,相同的查询需要300/400秒执行。当查询使用300/400秒时,有一些工具可以调试发生的事情吗?
更新1 这是我的sql developer截图,问题似乎是直接路径读取温度
更新2 report
更新3 report2
有什么建议吗?
答案 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
同时尝试应用最新更新。