Oracle中v$session和v$process动态性能视图怎么使用

来源:建站技术作者:樱由罗头衔:网络博主
导读:本期聚焦于小伙伴创作的《Oracle中v$session和v$process动态性能视图怎么使用》,敬请观看详情。在Oracle数据库运维和性能排查过程中,v$session和v$process是两个非常核心的动态性能视图。很多用户不清楚这两个视图分别存储什么信息,也不了解它们之间的关联方式,更不知道如何通过这两个视图排查会话阻塞、资源占用异常等问题。本文将详细介绍v$session和v$process的基本结构,说明两者通过什么字段进行关联,同时给出常见的查询场景示例,帮助用户快速掌握这两个视图的使用方法,提升数据库问题排查的效率。

在Oracle数据库的日常管理和故障排查工作中,v$session和v$process是两个高频使用的动态性能视图,前者记录当前数据库的所有会话信息,后者记录对应操作系统进程的相关信息,两者结合可以覆盖大部分会话、进程相关的排查需求。

Oracle中v$session和v$process动态性能视图怎么使用

v$session视图基础说明

v$session是Oracle数据库中用于展示当前所有活跃和非活跃会话信息的动态性能视图,每个连接到数据库的会话都会在该视图中对应一条记录。它包含了会话的用户信息、状态、执行的SQL、等待事件等核心内容。

常用字段说明

  • sid:会话的唯一标识符,是会话的核心ID
  • serial#:会话的序列号,和sid组合可以唯一确定一个会话
  • username:建立会话的数据库用户名
  • status:会话状态,常见值有ACTIVE(活跃)、INACTIVE(非活跃)、KILLED(已标记杀死)
  • sql_id:当前会话正在执行的SQL的ID
  • event:会话当前的等待事件,为空表示没有等待
  • paddr:对应v$process视图中addr字段的值,用于关联进程信息

基础查询示例

查询当前所有活跃会话的基本信息:

SELECT sid, serial#, username, status, sql_id, event
FROM v$session
WHERE status = 'ACTIVE'
  AND username IS NOT NULL;

v$process视图基础说明

v$process视图用于存储Oracle数据库后台进程以及用户会话对应的操作系统进程的相关信息,每个进程对应一条记录,包含进程的启动时间、内存占用、操作系统进程ID等内容。

常用字段说明

  • addr:进程的地址,和v$session的paddr字段关联
  • pid:Oracle进程的内部标识符
  • spid:操作系统层面的进程ID
  • username:启动该进程的操作系统用户名
  • program:进程对应的程序名称

基础查询示例

查询所有进程的操作系统ID和程序信息:

SELECT addr, pid, spid, username, program
FROM v$process;

v$session与v$process的关联使用

两个视图通过v$session的paddr字段和v$process的addr字段进行关联,关联后可以同时获取会话的数据库层面信息和对应的操作系统进程信息。

关联查询示例

查询活跃会话对应的操作系统进程ID:

SELECT s.sid, s.serial#, s.username AS db_user,
       p.spid AS os_pid, p.program AS os_program
FROM v$session s
JOIN v$process p ON s.paddr = p.addr
WHERE s.status = 'ACTIVE'
  AND s.username IS NOT NULL;

常见使用场景

排查会话阻塞问题

通过v$session的blocking_session字段可以找到阻塞当前会话的会话ID,再关联v$process找到对应的操作系统进程:

SELECT s.sid, s.serial#, s.username, s.blocking_session,
       p.spid AS blocking_os_pid
FROM v$session s
JOIN v$process p ON s.paddr = p.addr
WHERE s.blocking_session IS NOT NULL;

查询会话对应的完整SQL信息

结合v$sql视图可以查询会话正在执行的SQL完整内容:

SELECT s.sid, s.serial#, s.username,
       q.sql_text
FROM v$session s
JOIN v$process p ON s.paddr = p.addr
JOIN v$sql q ON s.sql_id = q.sql_id
WHERE s.status = 'ACTIVE'
  AND s.username IS NOT NULL;

清理异常会话

当发现异常会话需要清理时,先通过关联查询确认会话和进程信息,再使用alter system kill session命令清理:

-- 先查询异常会话信息
SELECT s.sid, s.serial#, s.username, p.spid
FROM v$session s
JOIN v$process p ON s.paddr = p.addr
WHERE s.status = 'INACTIVE'
  AND s.username = 'TEST_USER';

-- 清理会话,语法为alter system kill session 'sid,serial#'
ALTER SYSTEM KILL SESSION '123,456';

v$sessionv$processOracle动态性能视图数据库运维修改时间:2026-06-06 23:11:12

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。