暂无图片
暂无图片
9
暂无图片
暂无图片
暂无图片

oracle V$SESSION 和 V$PROCESS两个视图的区别和联系

原创 让世界为你转身 2025-04-24
1106

在 Oracle 数据库中,V$SESSIONV$PROCESS 是两个关键动态性能视图,它们记录了会话(Session)和进程(Process)的信息。理解它们的区别、联系以及如何联合使用,对于分析数据库连接、排查性能问题至关重要。以下是详细解析:


1. 视图核心区别

特性 V$SESSION V$PROCESS
定义 记录当前所有会话(逻辑连接)的信息。 记录所有 Oracle 进程(物理进程)的信息。
逻辑 vs 物理 逻辑上的用户或后台会话。 物理上的操作系统进程(如服务器进程、后台进程)。
核心用途 分析会话状态、用户活动、SQL 执行等。 分析进程资源消耗(CPU、内存)、操作系统级信息。
关联关系 V$SESSION.PADDR = V$PROCESS.ADDR
典型字段 SID, SERIAL#, USERNAME, STATUS, SQL_ID PID, SPID(操作系统进程ID), PGA_USED_MEM

2. 视图详细说明

(1) V$SESSION

  • 用途
    记录每个会话的详细信息,包括用户连接、SQL 执行、等待事件等。
  • 关键字段
    • SID:会话唯一标识符。
    • SERIAL#:会话序列号(用于唯一标识会话实例,防止重用 SID 的混淆)。
    • USERNAME:数据库用户名(如 SYS, SCOTT)。
    • STATUS:会话状态(ACTIVEINACTIVEKILLED)。
    • SQL_ID:当前执行的 SQL 语句 ID。
    • EVENT:会话当前等待的事件(如 db file sequential read)。
    • MACHINE:客户端机器名。
    • PROGRAM:客户端程序名(如 sqlplus.exe)。
    • LOGON_TIME:会话登录时间。

(2) V$PROCESS

  • 用途
    记录 Oracle 进程的物理资源使用情况,包括服务器进程和后台进程。
  • 关键字段
    • ADDR:进程地址(与 V$SESSION.PADDR 关联)。
    • PID:Oracle 进程 ID(内部编号)。
    • SPID:操作系统进程 ID(可通过 ps -ef | grep <SPID> 查看)。
    • PGA_USED_MEM:PGA 已使用内存(字节)。
    • BACKGROUND:标记是否为后台进程(如 PMON, DBWn)。

3. 视图联系与使用场景

(1) 会话与进程的关联

  • 专用服务器模式(Dedicated Server)
    每个会话对应一个独立的服务器进程,此时 V$SESSION.PADDR 直接关联 V$PROCESS.ADDR

  • 共享服务器模式(Shared Server)
    多个会话共享一组服务器进程,此时会话与进程的关联可能动态变化,需通过 V$SHARED_SERVER 进一步分析。

(2) 典型分析场景

  1. 监控当前活跃会话与进程
    找出哪些会话正在执行 SQL,并查看对应的操作系统进程资源消耗。

  2. 诊断高资源占用问题
    定位消耗大量 CPU 或内存的会话及其关联的 SQL。

  3. 追踪会话来源
    通过 MACHINEPROGRAM 等字段识别会话来源(如异常连接)。

  4. 分析连接泄漏
    发现长期处于 INACTIVE 状态的会话,可能由未关闭的连接池或应用程序 Bug 导致。

  5. 终止异常会话
    通过 SIDSERIAL# 终止问题会话(需权限)。


4. 联合使用示例

(1) 查看所有会话及其关联的进程信息

SELECT s.SID, s.SERIAL#, s.USERNAME, s.STATUS, s.SQL_ID, p.PID, p.SPID, p.PGA_USED_MEM FROM V$SESSION s JOIN V$PROCESS p ON s.PADDR = p.ADDR WHERE s.USERNAME IS NOT NULL; -- 过滤后台会话

输出字段解释

  • SPID:操作系统进程 ID(可用于 top -p <SPID>ps -ef 监控)。
  • PGA_USED_MEM:进程内存使用量,单位为字节。

(2) 查找消耗 CPU 或内存最高的会话

SELECT s.SID, s.USERNAME, s.SQL_ID, p.SPID, ROUND(p.PGA_USED_MEM/1024/1024, 2) AS PGA_MB, s.LOGON_TIME, s.MACHINE, s.PROGRAM FROM V$SESSION s JOIN V$PROCESS p ON s.PADDR = p.ADDR ORDER BY p.PGA_USED_MEM DESC;

(3) 定位长时间未提交的事务

SELECT s.SID, s.SERIAL#, s.USERNAME, t.START_TIME, t.USED_UBLK AS Undo_Blocks, s.SQL_ID, s.MACHINE, s.PROGRAM FROM V$SESSION s JOIN V$TRANSACTION t ON s.TADDR = t.ADDR WHERE s.USERNAME IS NOT NULL;

(4) 终止指定会话

-- 根据 SID 和 SERIAL# 终止会话 ALTER SYSTEM KILL SESSION 'SID,SERIAL#';

5. 高级分析技巧

(1) 结合 V$SQL 分析 SQL 性能

通过 V$SESSION.SQL_ID 关联 V$SQL,获取 SQL 的完整文本和执行计划:

SELECT s.SID, s.SQL_ID, q.SQL_TEXT, q.EXECUTIONS, q.ELAPSED_TIME FROM V$SESSION s JOIN V$SQL q ON s.SQL_ID = q.SQL_ID WHERE s.STATUS = 'ACTIVE';

(2) 分析会话等待事件

查看会话的等待事件,定位 I/O、锁等问题:

SELECT SID, EVENT, STATE, WAIT_TIME, SECONDS_IN_WAIT FROM V$SESSION_WAIT WHERE SID IN (SELECT SID FROM V$SESSION WHERE STATUS = 'ACTIVE');

(3) 跟踪操作系统进程

通过 SPID 使用操作系统工具(如 straceperf)跟踪进程行为:

# Linux 示例 ps -ef | grep ora_ # 查找 Oracle 进程 top -p <SPID> # 监控 CPU 和内存 strace -p <SPID> # 跟踪系统调用(需权限)

6. 注意事项

  • 权限要求:访问 V$SESSIONV$PROCESS 需要 SELECT_CATALOG_ROLEDBA 权限。
  • 动态性:这些视图的数据是实时变化的,多次查询结果可能不同。
  • 共享服务器模式:在共享服务器模式下,会话与进程的关联可能更复杂,需结合 V$SHARED_SERVER 分析。
  • 性能影响:频繁查询动态视图可能对高负载系统产生轻微性能影响。

总结

  • V$SESSION:聚焦于逻辑会话的上下文(用户、SQL、状态等)。
  • V$PROCESS:聚焦于物理进程的资源消耗(CPU、内存、OS 进程 ID)。
  • 联合使用:通过 PADDRADDR 关联二者,可全面分析会话的“逻辑行为”和“物理资源消耗”,是性能调优和故障排查的核心手段。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论