快速查询出正在等待的语句,如果执行时间过长,可以快速定位问题
select a.sid,
a.username,
a.sql_id,
a.event,
a.blocking_session blk,
a.last_call_et call,
b.sql_text,
a.osuser,
a.machine,
a.PLSQL_ENTRY_OBJECT_ID plsql,
a.program
from gv$session a, v$sqlarea b
where a.sql_id = b.sql_id
and (a.type = 'USER' and a.status = 'ACTIVE')
order by a.last_call_et desc
执行结果如下图,其中CALL单位是秒,如果一个查询sql这个CALL值很大,就可以把对应的sql拎出来看看了
如果是要kill掉这个运行很久的sql
select 'alter system kill session '''||sid||','||serial#||''' immediate;' from gv$session where sql_id='7tyvs785pbbpr';
把这个sql执行出来的结果,进行执行,kill掉正在运行的sql会话
7tyvs785pbbpr
替换为需要查看的 sql_id
例如:alter system kill session '2535,59237' immediate;
分析SQL慢的原因,找出执行计划
select * from table(dbms_xplan.display_cursor('gcn4x05tvbwzf',null,'ADVANCED ALLSTATS LAST +PEEKED_BINDS'));
gcn4x05tvbwzf
值替换为需要查看的 sql_id