查看长时间运行的查询 / 会话
Oracle会话与进程命令
-- Active, long-running SQL:
SELECT s.sid, s.serial#, s.username, s.status,
s.last_call_et AS seconds_active,
s.sql_id, q.sql_text,
s.event, s.machine, s.program
FROM v$session s
LEFT JOIN v$sql q ON q.sql_id = s.sql_id
AND q.child_number = s.sql_child_number
WHERE s.type = 'USER'
AND s.status = 'ACTIVE'
AND s.last_call_et > 60
ORDER BY s.last_call_et DESC;
-- Long operations with percentage progress:
SELECT sid, serial#, opname, sofar, totalwork,
ROUND(sofar/NULLIF(totalwork,0)*100,1) AS pct, time_remaining
FROM v$session_longops
WHERE sofar < totalwork ORDER BY start_time DESC;作用
列出运行超过 60 秒的活动会话以及长时间运行的批处理操作的进度。
适用场景
在收到响应慢的投诉时,找出是哪个查询让系统保持繁忙。
注意
last_call_et 是自上次调用以来的时间;空闲会话的该值也可能很大,因此 status='ACTIVE' 过滤条件很重要。仅查询;无风险。