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

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

  1. 查询正在等待的会话及其SQL语句

通过VSESSION和VSQL视图关联查询,可以获取正在等待的会话及其执行的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;

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

使用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;

  1. 查询当前用户正在等待的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 vsession a, vsql 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;

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

通过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"等)‌。

相关推荐
集智飞行几秒前
禁用Ubuntu网卡的电源管理(Power Management)
linux·运维·ubuntu
Irissgwe6 分钟前
Linux进程信号
linux·服务器·开发语言·c++·linux进程信号
水木兰亭6 分钟前
多进程编程总结
linux·运维·服务器
曾阿伦7 分钟前
SQL 用法详解:从基础操作到进阶实战的全场景指南
数据库·sql
NCU_wander8 分钟前
操作系统/数据库和业务应用/中间件/硬件之间的关系
数据库·中间件
Navicat中国10 分钟前
如何从0到1完成函数设计 | Navicat 教程
数据库·函数·navicat
梦想是造卫星10 分钟前
如何从零开始构建一个ros开发项目?
linux·ros开发
艾莉丝努力练剑11 分钟前
【Linux:文件 + 进程】理解IPC通信
linux·运维·服务器·开发语言·网络·c++·ide
开开心心就好12 分钟前
安卓免费证件照制作软件,无广告弹窗
linux·运维·安全·pdf·迭代器模式·依赖倒置原则·1024程序员节
jnrjian13 分钟前
Oracle tablespace 对象迁移
数据库·oracle