学习动态性能表(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 v$session s, v$process 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 v$locked_object l, dba_objects o, v$session 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

附注:

  在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 v$process p, v$session 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 v$process p, v$session 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

时间: 2024-10-08 16:21:25

学习动态性能表(7)--v$process的相关文章

学习动态性能表(5)--v$session

学习动态性能表 第五篇--V$SESSION  2007.5.29 在本视图中,每一个连接到数据库实例中的session都拥有一条记录.包括用户session及后台进程如DBWR,LGWR,arcchiver等等. V$SESSION中的常用列   V$SESSION是基础信息视图,用于找寻用户SID或SADDR.不过,它也有一些列会动态的变化,可用于检查用户.如例: SQL_HASH_VALUE,SQL_ADDRESS:这两列用于鉴别默认被session执行的SQL语句.如果为null或0,那

学习动态性能表(10)--v$session_longops

学习动态性能表 第十篇--V$SESSION_LONGOPS  2007.6.7 本视图显示运行超过6秒的操作的状态.包括备份,恢复,统计信息收集,查询等等. 要监控查询执行进展状况,你必须使用cost-based优化方式,并且: 设置TIMED_STATISTICS或SQL_TRACE参数值为true. 通过ANALYZE或DBMS_STATS数据包收集对象统计信息. 你可以通过DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS过程添加application-s

学习动态性能表(9)--v$filestat

学习动态性能表 第九篇--V$FILESTAT  2007.6.5 本视图记录各文件物理I/O信息.如果瓶颈与I/O相关,可用于分析发生的活动I/O事件.V$FILESTAT显示出数据库I/O的下列信息(不包括日志文件): l  物理读写数 l  块读写数 l  I/O读写总耗时 以上数值自实例启动即开始记录.如果获取了两个快照,那么二者之间的差异即是这一时间段内活动I/O统计. V$FILESTAT中的常用列:   l  FILE#:文件序号: l  PHYRDS:已完成的物理读次数: l 

学习动态性能表(14)--v$parameter&amp;v$system_parameter

学习动态性能表 第14篇--V$PARAMETER&V$SYSTEM_PARAMETER  2007.6.11 这两个视图列出的各参数项名称以及参数值.V$PARAMETER显示执行查询的session的参数值.V$SYSTEM_PARAMETER视图则列出实例的参数值. 例如,下列查询显示执行查询的session的SORT_AREA_SIZE参数值: SELECT value FROM V$PARAMETER WHERE name = 'sort_area_size'; 呵呵,可能有朋友还是不

学习动态性能表(15)--v$rollstat

学习动态性能表 第15篇--V$ROLLSTAT  2007.6.12 本视图自启动即保持并记录各回滚段统计项.在学习本视图之前,我们先来了解一下回滚段(rollback segment)的相关概念: 回滚段概述 回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值).回滚段的头部包含正在使用的该回滚段事务的信息.一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段可以存放多个事务的回滚信息. 回滚段的作用 1.事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在

学习动态性能表(13)--v$open_cursor

学习动态性能表 第13篇--V$OPEN_CURSOR  2007.6.8 本视图列出session打开的所有cursors,很多时候都将被用到,比如:你可以通过它查看各个session打开的cursor数. 当诊断系统资源占用时,它常被用于联接v$sqlarea和v$sql查询出特定SQL(高逻辑或物理I/O).然后,下一步就是找出源头.在应用环境,基本都是同一类用户登陆到数据库(在V$SQLAREA中拥有相同的PARSING_USER_ID),而通过这个就可以找出它们的不同.V$SQLARE

学习动态性能表(19)--v$undostat

学习动态性能表 第19篇--V$UNDOSTAT  2007.6.14 本视图监控当前实例中undo空间以及事务如何运行.并统计undo空间开销,事务开销以及实例可用的查询长度. V$UNDOSTAT中的常用列 Endtime:以10分钟为间隔的结束时间 UndoBlocksUsed:使用的undo块总数 TxnConcurrency:事务并发执行的最大数 TxnTotal:在时间段内事务执行总数 QueryLength:查询长度的最大值 ExtentsStolen:在时间段内undo区必须从一

学习动态性能表(17)--v$segstat&amp;v$segment_statistics

学习动态性能表 第17篇-(1)-V$SEGSTAT  2007.6.13 本视图实时监控段级(segment-level)统计项,支持oracle9ir2及更高版本 V$SEGSTAT中的常用列 TS#:表空间标识 OBJ#:字典对象标识 DATAOBJ#:数据对象标识 STATISTIC_NAME:统计项名称 STATISTIC#:统计项标识 VALUE:统计项值 V$SEGSTAT中的连接列 Column                              View         

学习动态性能表(22)V$resource_limit

学习动态性能表 第20篇--V$resource_limit  2007.6.15 就一条SQL语句供你参考: select * from V$RESOURCE_LIMIT where resource_name in('processes','sessions');