Oracle:查询当前正在等待执行的SQL语句

在Oracle数据库中,要查询当前正在等待执行的SQL语句,可以通过查询动态性能视图(Dynamic Performance Views)来实现。以下是几种常用的方法:
1. 查询正在等待的会话及其SQL语句

通过V$SESSION和V$SQL视图关联查询,可以获取正在等待的会话及其执行的SQL信息‌:
SELECT s.sid, s.serial#, s.username, s.status, s.sql_id, s.prev_sql_id, q.sql_text, s.program, s.machine, s.logon_time
FROM v$session s
LEFT JOIN v$sql q ON s.sql_id = q.sql_id
WHERE s.status = 'INACTIVE'  -- 筛选非活跃会话(即正在等待的会话)
  AND s.type != 'BACKGROUND'  -- 排除后台进程
  AND s.sql_id IS NOT NULL;

2. 查看长时间等待的会话

使用V$SESSION_WAIT视图可以查看会话的等待事件信息,帮助定位资源争用问题‌4:
SELECT sid, serial#, event, wait_time, state, wait_class
FROM v$session_wait
WHERE wait_time > 0  -- 仅显示有等待时间的会话
ORDER BY wait_time DESC;

3. 查询当前用户正在等待的SQL

如果只想查看当前用户正在等待的SQL语句,可以使用以下查询‌:
SELECT a.sid, a.serial#, a.paddr, a.machine, nvl(a.sql_id, a.prev_sql_id) sql_id, b.sql_text
FROM v$session a, v$sql b
WHERE a.username = sys_context('USERENV', 'CURRENT_USER')
  AND a.status = 'INACTIVE'
  AND nvl(a.sql_id, a.prev_sql_id) = b.sql_id;

4. 查看等待事件类别汇总

通过V$SESSION_WAIT_CLASS视图可以查看会话在各个等待类别上的总等待时间,帮助快速定位主要资源等待类型‌:
SELECT sid, wait_class, time_waited
FROM v$session_wait_class
WHERE time_waited > 0
ORDER BY time_waited DESC;

关键字段说明

    ‌SID‌:会话标识符。
    ‌SERIAL#‌:会话序列号,与SID一起用于唯一标识一个会话。
    ‌SQL_ID‌:正在执行的SQL语句的唯一标识。
    ‌SQL_TEXT‌:SQL文本内容(可能被截断,完整内容需从V$SQLAREA获取)。
    ‌EVENT‌:会话当前正在等待的资源或事件名称(如“db file sequential read”、“buffer busy waits”等)‌。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值