v$process

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

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

    找出资源进程

    找出它们的session,你必须将进程与会话联系起来。

    找出为什么session占用了如此多的资源

    2 SQL跟踪文件名是基于服务进程的操作系统进程ID。要找出session的跟踪文件,你必须将session与服务进程联系起来。

    3 某些事件,如rdbms ipc reply,鉴别session进程的Oracle进程ID在等什么。要发现这些进程在做什么,你必须找出它们的session。

你所看到的服务器上的后台进程(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,假设操作系统用户为:

  1. select s.sid,s.SERIAL#, s.username,p.spid
  2. from v$session s, v$process p
  3. where s.osuser = 'Administrator'
  4. and s.PADDR = p.ADDR;
  5. osuer   Administrator
  6. terminal USER-20150311PW
  7. machine WORKGROUP\USER-20150311PW

2 查看锁和等待

  1. SELECT /*+ rule */
  2. lpad(' ', decode(l.xidusn, 0, 3, 0)) || l.oracle_username User_name,
  3. o.owner,o.object_name,o.object_type,s.sid,s.serial#,p.spid
  4. FROM v$locked_object l, dba_objects o, v$session s, v$process p
  5. WHERE l.object_id = o.object_id
  6. AND l.session_id = s.sid and s.paddr = p.addr
  7. ORDER BY o.object_id, xidusn DESC;

找出锁正在执行的sql语句

  1. SELECT /*+ ORDERED */
  2. sql_text
  3. FROM v$sqltext a
  4. WHERE (a.hash_value, a.address) IN (
  5. SELECT DECODE (sql_hash_value,0, prev_hash_value, sql_hash_value ),
  6. DECODE (sql_hash_value, 0, prev_sql_addr, sql_address)
  7. FROM v$session b
  8. WHERE b.paddr = (SELECT addr FROM v$process c
  9. WHERE c.spid =13780))
  10. ORDER BY piece ASC-------找出指定的pid正在执行的sql语句
  11. .spid------用上面的sql找到
  12. --lock_object
  13. select sess.sid,
  14. sess.serial#,
  15. lo.oracle_username,
  16. lo.os_user_name,
  17. ao.object_name,
  18. lo.locked_mode
  19. from v$locked_object lo,
  20. dba_objects ao,
  21. v$session sess
  22. where ao.object_id = lo.object_id and lo.session_id = sess.sid;

附注:

  在linux环境可以通过ps查看进程信息包括pid,windows中任务管理器的PID与v$process中pid不能一一对应,这块在oracleDocument中也没有找到介绍,

后来google了一下,有资料介绍说是由于windows是多线程服务器,每个进程包含一系列线程。这点于unix等不同,Unix每个Oralce进程独立存在,在Nt上所有线程由Oralce进程衍生。

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

  1. SELECT s.SID, p.pid, p.spid signaled, s.osuser, s.program
  2. FROM v$process p, v$session s
  3. WHERE p.addr = s.paddr;
  4. 还可以通过和 v$bgprocess 连接查询到后台进程的名字:
  5. SELECT s.SID SID, p.spid threadid, p.program processname, bg.NAME NAME
  6. FROM v$process p, v$session s, v$bgprocess bg
  7. WHERE p.addr = s.paddr
  8. AND p.addr = bg.paddr
  9. AND bg.paddr <> '';

v$session

在本视图中,每一个连接到数据库实例中的session都拥有一条记录。包括用户session及后台进程如DBWR,LGWR,arcchiver等等。

V$SESSION中的常用列

V$SESSION是基础信息视图,用于找寻用户SID或SADDR。不过,它也有一些列会动态的变化,可用于检查用户。如例:

SQL_HASH_VALUE,SQL_ADDRESS:这两列用于鉴别默认被session执行的SQL语句。如果为null或0,那就说明这个session没有执行任何SQL语句。

PREV_HASH_VALUE和PREV_ADDRESS两列用来鉴别被session执行的上一条语句。

STATUS:这列用来判断session状态是:

  Achtive:正执行SQL语句(waiting for/using a resource)

  Inactive:等待操作(即等待需要执行的SQL语句)

Killed:被标注为删除

下列各列提供session的信息,可被用于当一个或多个combination未知时找到session。

Session信息

  SID:SESSION标识,常用于连接其它列

  SERIAL#:如果某个SID又被其它的session使用的话则此数值自增加(当一个 SESSION结束,另一个SESSION开始并使用了同一个SID)。

  AUDSID:审查session ID唯一性,确认它通常也用于当寻找并行查询模式

  USERNAME:当前session在oracle中的用户名。

  Client信息

数据库session被一个运行在数据库服务器上或从中间服务器甚至桌面通过SQL*Net连接到数据库的客户端进程启动,下列各列提供这个客户端的信息

  1. OSUSER:客户端操作系统用户名
  2. MACHINE:客户端执行的机器
  3. TERMINAL:客户端运行的终端
  4. PROCESS:客户端进程的ID
  5. PROGRAM:客户端执行的客户端程序

要显示用户所连接PC的 TERMINAL、OSUSER,需在该PC的ORACLE.INI或Windows中设置关键字TERMINAL,USERNAME。

Application信息

调用DBMS_APPLICATION_INFO包以设置一些信息区分用户。这将显示下列各列。

  CLIENT_INFO:DBMS_APPLICATION_INFO中设置

  ACTION:DBMS_APPLICATION_INFO中设置

  MODULE:DBMS_APPLICATION_INFO中设置

下列V$SESSION列同样可能会被用到:

  ROW_WAIT_OBJ#

  ROW_WAIT_FILE#

  ROW_WAIT_BLOCK#

  ROW_WAIT_ROW#

V$SESSION中的连接列

Column     View                                Joined  Column(s)

SID     V$SESSION_WAIT,,V$SESSTAT,,V$LOCK,V$SESSION_EVENT,V$OPEN_CURSOR   SID

(SQL_HASH_VALUE, SQL_ADDRESS) V$SQLTEXT, V$SQLAREA, V$SQL             (HASH_VALUE, ADDRESS)

(PREV_HASH_VALUE, PREV_SQL_ADDRESS) V$SQLTEXT, V$SQLAREA, V$SQL        (HASH_VALUE, ADDRESS)

TADDR V$TRANSACTION                                   ADDR

PADDR V$PROCESS                                     ADDR

示例:

  1. 1.查找你的session信息
  2. SELECT SID, OSUSER, USERNAME, MACHINE, PROCESS
  3. FROM V$SESSION WHERE audsid = userenv('SESSIONID');
  4. 2.machine已知的情况下查找session
  5. SELECT SID, OSUSER, USERNAME, MACHINE, TERMINAL
  6. FROM V$SESSION
  7. WHERE terminal = 'pts/tl' AND machine = 'rgmdbs1';
  8. 3查找当前被某个指定session正在运行的sql语句。假设sessionID100
  9. select b.sql_text
  10. from v$session a,v$sqlarea b
  11. where a.sql_hash_value=b.hash_value and a.sid=299
  12.  
  13. select b.sql_text
  14. from v$session a,v$sqlarea b
  15. where a.sql_hash_value=b.hash_value
  16. 寻找被指定session执行的SQL语句是一个公共需求,如果session是瓶颈的主要原因,那根据其当前在执行的语句可以查看session在做些什么。
  17. Used with SQL_ADDRESS to identify the SQL statement that is currently
  18. being executed

v$session 表中比较常用的几个字段说明^_^
1. sid,serial#
通过sid我们可以查询与这个session相关的各种统计信息,处理信息.
a. select * from v$sesstat where sid = :sid;
查询用户相关的各种统计信息.
select a.sid,a.statistic#,b.name,a.value
from v$sesstat a,v$statname b
where a.statistic# = b.statistic#
and a.sid = :sid;
b. 查询用户相关的各种io统计信息
select * from v$sess_io where sid = :sid;
c. 查询用户想在正在打开着的游标变量.
select * from v$open_cursor where sid = :sid;
d. 查询用户当前的等待信息. 以查看当前的语句为什么这么慢/在等待什么资源.
select * from v$session_wait where sid = :sid ;
e. 查询用户在一段时间内所等待的各种事件的信息. 以了解这个session所遇到的瓶颈^_^
select * from v$session_event where sid = :sid;
f. 还有, 就是当我们想kill当前session的时候可以通过sid,serial#来处理.
alter system kill session ':sid,:serail#';
2. paddr.字段, process addr, 通过这个字段我们可以查看当前进程的相关信息, 系统进程id,操作系统用户信息等等.
select a.pid,a.spid,b.name,b.description,a.latchwait,a.latchspin,a.pga_used_mem,a.pga_alloc_mem,a.pga_freeable_mem,a.pga_max_mem
from v$process a,v$bgprocess b
where a.addr = b.paddr(+)

and a.addr = :paddr
3. command 字段, 表明当前session正在执行的语句的类型.请参考reference.
4. taddr 当前事务的地址,可以通过这个字段查看当前session正在执行的事务信息, 使用的回滚段信息等^_^
select b.name rollname,a.*
from v$transaction a,v$rollname b
where a.xidusn = b.usn
and a.addr = '585EC18C';
5. lockwait字段, 可以通过这个字段查询出当前正在等待的锁的相关信息.
select *
from v$lock
where (id1,id2) = (
        select id1,id2 from v$lock where kaddr = '57C68C48'
)
6. (sql_address,sql_hash_value) (prev_sql_addr,prev_hash_value) 根据这两组字段, 我们可以查询到当前session正在执行的sql语句的详细信息.
select * from v$sqltext where address = :sql_address and hash_value = :sql_hash_value;
7.ROW_WAIT_OBJ#,ROW_WAIT_FILE#,ROW_WAIT_BLOCK#,ROW_WAIT_ROW#
可以通过这几个字段查询现在正在被锁的表的相关信息.^_^
a. 首先得到被锁的的信息
select * from dba_objects where object_id = :row_wait_obj#;
b. 根据row_wait_file#可以找出对应的文件的信息.
select * from v$datafile where file# = :row_wait_file#.
c. 在根据以上四个字段构造出被锁的字段的rowid信息.
select dbms_rowid.ROWID_CREATE(1,:row_wait_obj#,:row_wait_file#,:row_wait_block#,:row_wait_row#) from dual;
8. logon_time 当前session的登录时间.
9. last_call_et 该session idle的时间, 每3秒中更新一次^_^

v$session_wait

这是一个寻找性能瓶颈的关键视图。它提供了任何情况下session在数据库中当前正在等待什么(如果session当前什么也没在做,则显示它最后的等待事件)。

当系统存在性能问题时,本视图可以做为一个起点指明探寻问题的方向。

V$SESSION_WAIT中,每一个连接到实例的session都对应一条记录。

V$SESSION_WAIT中的常用列

  SID: session标识

   EVENT: session当前等待的事件,或者最后一次等待事件。

  WAIT_TIME: session等待事件的时间(单位,百分之一秒)如果本列为0,说明session当前session还未有任何等待。

  SEQ#: session等待事件将触发其值自增长

  P1, P2, P3: 等待事件中等待的详细资料

  P1TEXT, P2TEXT, P3TEXT: 解释说明p1,p2,p3事件

附注:

1.State字段有四种含义﹕

  Waiting:SESSION正等待这个事件。

  Waited unknown time:由于设置了timed_statistics值为false,导致不能得到时间信息。表示发生了等待,但时间很短。

  Wait short time:表示发生了等待,但由于时间非常短不超过一个时间单位,所以没有记录。

  Waited knnow time:如果session等待然后得到了所需资源,那么将从waiting进入本状态。

2.Wait_time值也有四种含义:

  1. 值>0:最后一次等待时间(单位:10ms),当前未在等待状态。
  2. 值=0:session正在等待当前的事件。
  3. 值=-1:最后一次等待时间小于1个统计单位,当前未在等待状态。
  4. 值=-2:时间统计状态未置为可用,当前未在等待状态。

3.Wait_time和Second_in_wait字段值与state相关:

(1)如果state值为Waiting,那么wait_time值无用。Second_in_wait值是实际的等待时间(单位:秒)。

(2)如果state值为Wait unknow time,那么wait_time值和Second_in_wait值都无用。

(3)如果state值为Wait short time,那么wait_time值和Second_in_wait值都无用。

(4)如果state值为Waiting known time,那么wait_time值就是实际等待时间(单位:秒),Second_in_wait值无用

V$SESSION_WAIT中的连接列

Column  View    Joined Column(s)

SID   V$SESSION   SID

示例:

  1. 1.列出当前系统的等待事件
  2. SELECT event,
  3. sum(decode(wait_time,0,1,0)) "Curr",
  4. sum(decode(wait_time,0,0,1)) "Prev",
  5. count(*)"Total"
  6. FROM v$session_wait GROUP BY event ORDER BY count(*);

这个按事件和wait_time的分组查询列出下列的信息:

  多数的session都是空闲事件如:SQL*Net message from client, pipe get, PMON timer等。

  session的cpu占用可以通过上次session的非等待事件大致算出,除此问题外:看起来多数session没有在等待什么事情(难道他们都在干活?)但其最后等待事件都是SQL*Net message from client。

  1. 2列出指定ID的等待事件
  2. select * from v$session_wait where sid=299
  3. 3 应用p1,p2,p3进行等待事件的分析
  4. v$session_wait视图的列代表的缓冲区忙等待事件如下:
  5. P1—与等待相关的数据文件的全部文件数量。
  6. P2P1中的数据文件的块数量。
  7. P3—描述等待产生原因的代码。
  8. 例:select p1 "File #", p2 "Block #", p3 "Reason Code"
  9.   from v$session_wait
  10.   where event = 'buffer busy waits';
  11. 如果以上查询的结果显示一个块在忙等待,以下的查询将显示这一块的名称和类型:
  12. select owner, segment_name, segment_type
  13.  from dba_extents
  14.  where file_id = &P1 and &P2 between block_id and block_id + blocks -1;

v$session_event

本视图记录了每个session的每一项等待事件。由上文所知V$SESSION_WAIT显示了session的当前等待事件,而V$SESSION_EVENT则记录了session自启动起所有的事件。

V$SESSION_EVENT中的常用列

  SID:session标识

  EVENT:session等待的事件

  TOTAL_WAITS:此session当前事件的总等待数

  TIME_WAITED:此session总等待时间(单位,百分之一秒)

  AVERAGE_WAIT:此session当前事件平均等待时间(单位,百分之一秒)

  TOTAL_TIMEOUTS:等待超时次数

其它用法与V$SESSION_WAIT相似,不详述了

附注:

Oracle的等待事件是衡量Oracle运行状况的重要依据及指标。等待事件的概念是在Oracle7.0.1.2中引入的,大致有100个等待事件。

在Oracle 8.0中这个数目增加到了大约150个,在Oracle8i中大约有200个事件,在Oracle9i中大约有360个等待事件。主要有两种类别的等待事件,即空闲(idle)等待事件和非空闲(non-idle)等待事件。

关于空闲事件和非空闲事件目前通过google可以搜索到非常多详尽的相关信息,同时

Oracle Database Performance Tuning Guide and Reference中关于Wait Events也有非常详尽的描述,在此就不多费口舌了。

不过我在itpub论坛看到有热心人整理的chm格式非空闲事件说明,有兴趣的朋友可以下载,链接如下:

非空闲事件说明

详见:http://www.itpub.net/728733.html.

转:oracle几组重要的常见视图-v$process,v$session,v$session_wait,v$session_event的更多相关文章

  1. 转:oracle几组重要的常见视图-v$latch,v$latch_children,v$lock,v$locked_object

    v$latch Oracle Rdbms应用了各种不同类型的锁定机制,latch即是其中的一种.Latch是用于保护SGA区中共享数据结构的一种串行化锁定机制.Latch的实现是与操作系统相关的, 尤 ...

  2. 转:oracle几组重要的常见视图-v$undostat,v$open_cursor,v$rowcache,v$session_longops,v$waitstat

    v$undostat 本视图监控当前实例中undo空间以及事务如何运行.并统计undo空间开销,事务开销以及实例可用的查询长度. V$UNDOSTAT中的常用列 Endtime:以10分钟为间隔的结束 ...

  3. 转:oracle几组重要的常见视图-v$segstat,v$segment_statistics,v$filestat,v$rollstat

    v$segstat 本视图实时监控段级(segment-level)统计项,支持oracle9ir2及更高版本 V$SEGSTAT中的常用列 TS#:表空间标识 OBJ#:字典对象标识 DATAOBJ ...

  4. oracle学习系列之四 (视图)

    视图视图是数据库中特有的对象.视图用于存储查询,但不会存储数据(物化视图除外).这是视图和数据表的重要区别.可以利用视图进行查询,插入,更新和删除数据.Oracle有如下四种视图(关系视图,内嵌视图, ...

  5. 十三、oracle 数据字典和动态性能视图

    一.概念数据字典是oracle数据库中最重要的组成部分,它提供了数据库的一些系统信息.动态性能视图记载了例程启动后的相关信息. 二.数据字典1).数据字典记录了数据库的系统信息,它是只读表和视图的集合 ...

  6. oracle 数据字典和动态性能视图

    一.概念数据字典是oracle数据库中最重要的组成部分,它提供了数据库的一些系统信息.动态性能视图记载了例程启动后的相关信息. 二.数据字典1).数据字典记录了数据库的系统信息,它是只读表和视图的集合 ...

  7. Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步

    摘自:http://blog.csdn.net/javaee_sunny/article/details/53439980 目录(?)[-] Oracle 10g 物化视图语法如下 实例演示 主要步骤 ...

  8. Oracle远程数据建物化视图(materialized)创建简单记录,以及DBLINK的创建

    目的:实现远程数据库访问及其相应表的定时同步 一.远程数据库dblink的创建 select * from dba_db_links; select * from user_sys_privs;--查 ...

  9. H3C常见视图及命令

    H3C常见视图及命令 H3C Comware的视图模式 1.用户视图:查看系统的硬件和系统的信息 2.系统视图(类似于Cisco的配置模式) 3.路由协议视图 4.接口视图 5.用户界面视图 各种视图 ...

随机推荐

  1. spring3: 依赖和依赖注入-xml配置-DI的配置

    3.1.1  依赖和依赖注入 传统应用程序设计中所说的依赖一般指“类之间的关系”,那先让我们复习一下类之间的关系: 泛化:表示类与类之间的继承关系.接口与接口之间的继承关系: 实现:表示类对接口的实现 ...

  2. Django进阶Model篇001 - mysql 数据库的配置

    django 默认支持sqlite.mysql.oracle.postgresql数据库,像db2和sqlserver之类的数据库需要第三方的支持,具体详见: https://docs.djangop ...

  3. HYSBZ - 2818莫比乌斯反演

    链接 题意很简洁不说了 题解:一开始我想直接暴力,复杂度是O(log(1e7)*sqrt(1e7))算出来是2e9,可能会复杂度爆炸,但是我看时限是10s,直接大力莽了一发暴力,没想到就过了= = 就 ...

  4. ubuntu 安装python3.7 以及安装pip3 出现Command '('lsb_release', '-a')' returned non-zero exit status 1问题解决

    最近因为电脑重装,东西全没了,总计一下最近重装环境的过程. 如果没有安装包,请下载: wget http://www.python.org/ftp/python/3.7.0/Python-3.7.0. ...

  5. 【2018年全国多校算法寒假训练营练习比赛(第四场)-A】石油采集(匈牙利算法)

    试题链接:https://www.nowcoder.com/acm/contest/76/A [思路] 每个‘#’的右边和下边如果也是‘#’说明这两个点构成通路,以此重构一幅图,然后找二分图的最大匹配 ...

  6. 微信oauth2验证

    微信公众号进行oauth2验证时的要求: 需要两个地方配置: (1)   Oauth2验证链接中的appid.redirecturi (2)   微信公众号授权回调页面域名: Appid为公众号的ap ...

  7. [面试时]我是如何讲清楚TCP/IP是如何实现可靠传输的 转

    [面试时]我是如何讲清楚TCP/IP是如何实现可靠传输的 - shawjan的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/shawjan/article/det ...

  8. Centos 6.3 Realtek Audio Driver Compile

    /**************************************************************************** * Centos 6.3 Realtek A ...

  9. 【Android】Android 学习记录贴

    官网 教程学习笔记 Genymotion 安卓虚拟器太慢,用Genymotion(装载eclipse的插件) 利用Genymotion运行Android应用程序 1.首先,点击 来启动或者创建您要使用 ...

  10. 【retina】手机上 1PX 边框

    1像素边框,在2倍屏幕上为2“占位”,3倍屏上为3“占位”,但设计师就要1“占位” .content h1:after, .content h2:after { border-top: 1px sol ...