学习动态性能表(7)--v$process

学习动态性能表

第七篇--V$PROCESS  2007.5.30

 

  本视图包含当前系统oracle运行的所有进程信息。常被用于将oracle或服务进程的操作系统进程ID与数据库session之间建立联系。在某些情况下非常有用:

 

  1. 如果数据库瓶颈是系统资源(如:cpu,内存),并且占用资源最多的用户总是停留在某几个服务进程,那么进行如下诸项:

 

  • 找出资源进程
  • 找出它们的session,你必须将进程与会话联系起来。
  • 找出为什么session占用了如此多的资源

 

  1. SQL跟踪文件名是基于服务进程的操作系统进程ID。要找出session的跟踪文件,你必须将session与服务进程联系起来。
  2. 某些事件,如rdbms ipc reply,鉴别session进程的Oracle进程ID在等什么。要发现这些进程在做什么,你必须找出它们的session。
  3. 你所看到的服务器上的后台进程(DBWR,LGWR,PMON等)都是服务进程。要想知道他们在做什么,你必须找到他们的session。

 

V$PROCESS中的常用列

  • ADDR:进程对象地址
  • PID:oracle进程ID
  • SPID:操作系统进程ID

 

V$PROCESS中的连接列

Column                       View                            Joined Column(s)

ADDR                         V$SESSION                PADDR

 

 

示例:

  1. 查找指定系统用户在oracle中的session信息及进程id,假设操作系统用户为:junsansi

select s.sid,s.SERIAL#, s.username,p.spid

  from vsessions,vprocess p

 where s.osuser = 'junsansi'

   and s.PADDR = p.ADDR

 

  1. 查看锁和等待

SELECT /*+ rule */

 lpad(' ', decode(l.xidusn, 0, 3, 0)) || l.oracle_username User_name,

 o.owner,o.object_name,o.object_type,s.sid,s.serial#,p.spid

  FROM vlockedobjectl,dbaobjectso,vsession s, v$process p

 WHERE l.object_id = o.object_id

   AND l.session_id = s.sid and s.paddr = p.addr

 ORDER BY o.object_id, xidusn DESC

 

  1.  

 

 

附注:

  在linux环境可以通过ps查看进程信息包括pid,windows中任务管理器的PID与v$process中pid不能一一对应,这块在oracleDocument中也没有找到介绍,后来google了一下,有资料介绍说是由于windows是多线程服务器,每个进程包含一系列线程。这点于unix等不同,Unix每个Oralce进程独立存在,在Nt上所有线程由Oralce进程衍生。

  要在windows中显示oracle相关进程pid,我们可以通过一个简单的sql语句来实现。

SELECT s.SID, p.pid, p.spid signaled, s.osuser, s.program

  FROM vprocessp,vsession s

 WHERE p.addr = s.paddr;

 

SID

PID

SIGNALED

OSUSER

PROGRAM

1

2

2452

SYSTEM

ORACLE.EXE

2

3

2460

SYSTEM

ORACLE.EXE

3

4

2472

SYSTEM

ORACLE.EXE

4

5

2492

SYSTEM

ORACLE.EXE

5

6

2496

SYSTEM

ORACLE.EXE

6

7

2508

SYSTEM

ORACLE.EXE

7

8

2520

SYSTEM

ORACLE.EXE

8

9

2524

SYSTEM

ORACLE.EXE

10

12

1316

JSS\junsansi

PlSqlDev.exe

9

13

3420

JSS\junsansi

PlSqlDev.exe

13

14

660

JSS\junsansi

PlSqlDev.exe

 

还可以通过和 v$bgprocess 连接查询到后台进程的名字:

SELECT s.SID SID, p.spid threadid, p.program processname, bg.NAME NAME

  FROM vprocessp,vsession s, v$bgprocess bg

 WHERE p.addr = s.paddr

   AND p.addr = bg.paddr

   AND bg.paddr <> '00';

 

SID

THREADID

PROCESSNAME

NAME

1

2452

ORACLE.EXE

PMON

2

2460

ORACLE.EXE

DBW0

3

2472

ORACLE.EXE

LGWR

4

2492

ORACLE.EXE

CKPT

5

2496

ORACLE.EXE

SMON

6

2508

ORACLE.EXE

RECO

7

2520

ORACLE.EXE

CJQ0

8

2524

ORACLE.EXE

QMN0

 

Eygle大师写了一段sql脚本getsql.sql,用来获取指定pid正在执行的sql语句,在此也附注上来。

REM getsql.sql

REM author eygle

REM 在windows上,已知进程ID,得到当前正在执行的语句

REM 在windows上,进程ID为16进制,需要转换,在UNIX直接为10进制

SELECT   /*+ ORDERED */

         sql_text

    FROM v$sqltext a

   WHERE (a.hash_value, a.address) IN (

            SELECT DECODE (sql_hash_value,

                           0, prev_hash_value,

                           sql_hash_value

                          ),

                   DECODE (sql_hash_value, 0, prev_sql_addr, sql_address)

              FROM v$session b

             WHERE b.paddr = (SELECT addr

                                FROM v$process c

                               WHERE c.spid = TO_NUMBER ('&pid', 'xxxx')))

ORDER BY piece ASC

posted on   jack_Meng  阅读(940)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2014-03-12 C#对Jason序列化匿名对象
2014-03-12 C#对象的三种序列化
2014-03-12 BinaryFormatter、SoapFormatter、XML3种序列化
2014-03-12 NET怎么精确计算一个对象占用的内存空间(GMK)
2014-03-12 C# 能否获取一个对象所占内存的大小?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

支付宝打赏

主题色彩