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

相关推荐
Johny_Zhao22 分钟前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
NineData31 分钟前
NineData 迁移评估功能正式上线
数据库·dba
NineData6 小时前
数据库迁移总踩坑?用 NineData 迁移评估,提前识别所有兼容性风险
数据库·程序员·云计算
赵渝强老师8 小时前
【赵渝强老师】PostgreSQL中表的碎片
数据库·postgresql
全栈老石12 小时前
拆解低代码引擎核心:元数据驱动的"万能表"架构
数据库·低代码
倔强的石头_1 天前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
chlk1232 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑2 天前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件2 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
深紫色的三北六号2 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移