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

相关推荐
计算机安禾3 小时前
【数据库系统原理】第19篇:计算机存储层次结构与数据库文件的物理组织
数据库·oracle
JAVA面经实录9173 小时前
操作系统面试题
java·服务器·数据库·计算机网络·面试
摇滚侠4 小时前
mariadb-libs 被 mysql-community-libs-5.7.28-1.el7.x86_64 取代
数据库·mysql·mariadb
DIY源码阁4 小时前
JavaSwing饮品管理系统 - MySQL版
java·数据库·mysql·eclipse
专注搞钱4 小时前
GPT-4o写设备Recipe:从3小时到10分钟
数据库·人工智能·gpt·半导体
暮云星影5 小时前
全志linux开发屏幕适配(一)屏幕参数设置说明
linux·arm开发
东风破1375 小时前
达梦数据库实战:备份恢复与数据迁移全攻略(实例初始化、服务注册、路径迁移)
数据库·chrome
SelectDB技术团队5 小时前
2026 SelectDB AI 产品发布会:Agent Native 数据基础设施能力全景发布
数据库·人工智能·agent·apache doris·selectdb
爱吃羊的老虎6 小时前
【数据库】模块一:数据库基础与关系代数
数据库
dishugj6 小时前
iSCSI + Multipath + ASM:Oracle RAC 共享存储技术链详解
数据库·oracle