在为会话发出JDBC超时时,是否可以找出在Oracle数据库中正在执行/等待的查询?
我检查了会话,我可以看到P2TEXT ='中断'和P3TEXT ='超时'和wait_class ='系统I / O',但sql_id为空,p2为0。
提前致谢。
答案 0 :(得分:1)
使用活动会话历史记录(ASH)数据来查找正在运行的内容和时间。
ASH数据基于抽样。不要指望在精确的毫秒内找到确切的查询。但是如果存在性能问题,它应该在这样的查询中突出显示:
select username, sample_time, sql_id
from gv$active_session_history
join dba_users
on gv$active_session_history.user_id = dba_users.user_id
where sample_time between timestamp '2017-05-20 09:00:00' and timestamp '2017-05-21 09:05:00'
order by sample_time desc;
该视图通常仅包含过去一天的数据,具体取决于系统的繁忙程度。如果您需要及时返回,您可以使用DBA_HIST_ACTIVE_SESS_HISTORY。