Oracle 动态性能表 v$session & v$process各个字段的说明

本文详细介绍了Oracle动态性能表v$session和v$process中的各个字段,包括SID、SERIAL#、AUDSID、COMMAND、STATUS、SERVER、TYPE等,并解释了字段含义和应用场景。AUDSID作为审计会话ID,与SID不同,主要用于区分一般用户连接和Internal/后台连接。同时,文章还探讨了不同类型会话(background或user)下字段的不同含义,如PROCESS、OSUSER、MACHINE和TERMINAL等,以及它们在客户端和服务器端操作系统上的意义。
摘要由CSDN通过智能技术生成

v$session

 参照:

v$session &v$process各字段的说明【转载】

oracle官方文档之V$SESSION


v$session描述的对象是一个会话

v$session描述的对象是一个当前存在的会话(该会话不是包括当前连接到数据库的会话,这只是数据库前台服务器进程的会话,还有数据库后台进程的会话,它是没有连接的)。

下面对v$session里的字段进行分组说明:


用于标识确定唯一的一个会话:SID:SERIAL#或是SADDR

SADDR: session address

 或是

SID: session identifier,常用于连接其它列。

 

SERIAL#: sid 会重用,但是同一个sid被重用时,serial#会增加,不会重复。

 注释:

AUDSID: audit session id。

可以通过audsid查询当前session的sid。select sid from v$session where audsid=userenv('sessionid');

所以,SIDAUDSID两者值是一一对应的。

 AUDSID用途不一样跟SID



一个会话的与自身相关的属性:

COMMAND: session正在执行的SQL Id。1代表create table,3代表select。

 

TADDR: 当前的transaction address。可以用来关联v$transaction的addr字段。



STATUS: 用来判断session状态。Active:正执行SQL语句。Inactive:等待操作。Killed:被标注为删除。

 

SERVER: server type (dedicated or shared)

Server type:

  • DEDICATED

  • SHARED

  • PSEUDO (?)

  • POOLED (?)

  • NONE

注释:

v$session中server字段何时为none?



TYPE: session type (background or user)


USER#: session's user id。等于dba_users中的user_id。Oracle内部进程(即后台进程)的user#为0。

 

USERNAME: session's username,即表示(服务端数据库里的)哪个数据库用户(而非服务端的操作系统的用户)在使用该会话。等于dba_users中的username。Oracle内部进程(即后台进程)的username为空。


 

SCHEMA#: schema user id。Oracle内部进程的schema#为0。

 

SCHEMANAME: schema username。Oracle内部进程的schemaname为sys。(??不是为空?对应于username?)




一个会话的所在的进程:

PADDR: process address(Address of the process that owns the session),关联v$process的addr字段,可以通过这个字段查处当前session对应操作系统的那个进程的id。

 



 TYPE字段为background时,PROGRAM为服务端数据库里的oracle后台进程TYPE字段为user时,PROGRAM为客户端(用于连接到服务端数据库的)应用程序(,例如,sqlplus.exe)。而以下除了PROGRAM外的字段都是用于描述PROGRAM的相关属性的:

 

PROGRAM: 客户端应用程序的程序名。这里说明一点,我们通过客户端连接到远程的服务端后,再在比如客户端的sqlplus窗口上使用v$session来查看的话,则v$session视图中PROGRAM字段里的值为比如ORACLE.EXE (PMON)这样子的是表示服务端的实例的后台进程们,那么此时v$session视图中PROCESS字段里的值表示为这些服务端的进程在服务端操作系统里的操作系统级别的进程ID号;而当v$session视图中PROGRAM字段里的值为比如sqlplus.exe或是sqldeveloperw.exe这样子的时才是表示这些进程是来自客户端的进程(即一个应用程序(静)的复制来运行(动))的程序名,那么此时v$session视图中PROCESS字段里的值才表示为这些来自客户端的进程在客户端操作系统里的操作系统级别的进程ID号;

总之,TYPE字段为background时,PROGRAM为服务端的oracle后台进程TYPE字段为user时,PROGRAM为客户端的用户进程

 

OSUSER: 客户端操作系统用户名。

 

PROCESS: 客户端应用程序在其操作系统级别上的process id。

 

MACHINE: 客户端machine name。(表示ip地址?) 即一般是客户端所在主机的主机名?

 

TERMINAL: 客户端执行的terminal name。即一般是客户端所在主机的主机名。与MACHINE区别,不清楚。????

                    附加:

                    当MACHINE=计算机名时,TERMINAL=unkown;MACHINE=工作组/计算机名时,TERMINAL=计算机名


注释:

类似ORACLE.EXE (PMON)这些实例的后台进程是没有和客户端存在连接的。

如果v$session视图中PROGRAM字段里的值所表示的一个进程是来自服务端的,则v$session视图中:

OSUSER: 服务端操作系统用户名。

 

PROCESS: 服务端在操作系统级别上的process id。

 

MACHINE: 服务端machine name。

 

TERMINAL: 服务端执行的terminal name。表示服务端所在主机的主机名。

以上几个字段表示的是服务端的操作系统上的意义。

如果v$session视图中PROGRAM字段里的值所表示的一个进程是来自客户端的,则以上几个字段表示的是客户端的操作系统上的意义。


 


在会话中执行的SQL语句的相关信息:

COMMAND: session正在执行的SQL Id。1代表create table,3代表select。


SQL_ADDRESS, SQL_HASH_VALUE, SQL_ID, SQL_CHILD_NUMBER: session正在执行的sql statement,和v$sql中的address, hash_value, sql_id, child_number相对应。

 

PREV_SQL_ADDR, PREV_HASH_VALUE, PREV_SQL_ID, PREV_CHILD_NUMBER: 上一次执行的sql statement。

 


用于SQL语句跟踪的会话属性:

MODULE, MODULE_HASH, ACTION, ACTION_HASH, CLIENT_INFO: 应用通过DBMS_APPLICATION_INFO设置的一些信息。



 

FIXED_TABLE_SEQUENCE: 当session完成一个user call后就会增加的一个数值,也就是说,如果session inactive,它就不会增加。因此可以根据此字段的值变化来监控某个时间点以来的session的性能情况。例如,一个小时以前,某个session的FIXED_TABLE_SEQUENCE是10000,而现在是20000,则表明一个小时内其user call比较频繁,可以重点关注此session的performance statistics。

 


 LOCKWAIT: 可以通过这个字段查询出当前正在等待的锁的相关信息。sid & lockwait与v$lock中的sid & kaddr相对应。

ROW_WAIT_OBJ#: 被锁定行所在table的object_id。和dba_objects中的object_id关联可以得到被锁定的table name。

 

ROW_WAIT_FILE#: 被锁定行所在的datafile id。和v$datafile中的file#关联可以得到datafile name。

 

ROW_WAIT_BLOCK#: Identifier for the block containing the row specified in ROW_WAIT_ROW#

 

ROW_WAIT_ROW#: session当前正在等待的被锁定的行。



 

LOGON_TIME: session logon time


说明:

1、V$SESSION中AUDSID字段的产生原理及含义


Oracle的V$SESSION视图中有一列AUDSID,一直不知其含义,在MetaLink上看到一篇文章How Sessions get Their AUDSID Identifier [ID 122230.1],详细讲述了AUDSID的产生原理和含义,大致内容总结如下:

  1. AUDSID由SYS.AUDSES$这个SEQUENCE产生,当有一个新的会话产生,其AUDSID的值即为这个SEQUENCE的NEXTVAL。
  2. Oracle 10g之前,在会话为’CONNECT INTERNAL’ 或为oracle进程是Oracle后台进程这两种情况的时候,AUDSID的值为0。’CONNECT INTERNAL’即指以AS SYSDBA和AS SYSOPER连接的会话。
  3. 10g及之后,AUDSID在’CONNECT INTERNAL’ 时为UB4MAX(4294967295), 在Oracle后台进程连接时为0。具体如下:

If AUDSID=0, then就是 Oracle后台进程产生的一个会话。

If AUDSID=4294967295, then说明是sys用户产生的一个会话。

If 0<AUDSID<4294967295,then说明是普通用户产生的一个会话。


注:UB4=UNSIGNED INT,取值范围为0-(2^32-1=4294967295)

由此可以看出,AUDSID与V$SESSION视图中的SID不同的是,AUDSID主要是用于区分Oracle中的一般用户连接Internal/后台连接这两类的。所以对于唯一的确定一个应用用户(即一般用户)会话来说,除了使用SID和SERIAL的组合,还可以使用AUDSID,来进行区别。

注释:

AUDSID由SYS.AUDSES$这个SEQUENCE(即序列,这种数据库对象)产生, 由desc  SYS.AUDSES$提示证明他是个SEQUENCE(即序列,这种数据库对象)。



2、看到一个会话,我们首先要区分该会话的类型是什么,即查看v$session视图时首先要看TYPE字段,因为v$session视图中字段PROGRAMPROCESS、OSUSER、MACHINE、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值