zoukankan      html  css  js  c++  java
  • 学习动态性能表(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

    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 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

    JSSjunsansi

    PlSqlDev.exe

    9

    13

    3420

    JSSjunsansi

    PlSqlDev.exe

    13

    14

    660

    JSSjunsansi

    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

  • 相关阅读:
    Python Revisited Day 13 (正则表达式)
    Python Revisited Day 06 (面向对象程序设计)
    Python Revisited (变量)
    Python Revisited Day 05(模块)
    Python Revisited Day 04 (控制结构与函数)
    Python Revisited Day 03 (组合数据类型)
    Numpy
    Python Revisited Day 01
    Python3使用openpyxl读写Excel文件
    Python3操作YAML文件
  • 原文地址:https://www.cnblogs.com/mq0036/p/4332739.html
Copyright © 2011-2022 走看看