快速查询出正在等待的语句,如果执行时间过长,可以快速定位问题

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拎出来看看了

image.png

如果是要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
image.png