v$Session详解

     从Oracle10gR1开始,Oracle在V$SESSION中增加关于等待事件的字段,实际上也就是把原来V$SESSION_WAIT视图中的所有字段全部整合到了V$SESSION视图中,开始的时候我还以为ASH是依赖联合查询来获取信息的,仔细一看才发现现在V$SESSION已经发生了变化。(如果进一步研究你会发现,实际上V$SESSION的底层查询语句及X$表已经有了变化),这一变化使得我们的查询得以简化,但是也使得V$SESSION_WAIT开始变得多余,此外V$SESSION中还增加了BLOCKING_SESSION等字段,以前我们需要通dba_waiters等视图才能获得的信息,现在也可以直接从V$SESSION中得到了。既然这样,让我们好好研究V$SESSION视图中每个字段的含义。

    首先,请看官方文档上面关于V$SESSION字段的说明:

     v$session:This view has one row for every session connected to the database instance. The sessions include user sessions, as well as background processes like DBWR, LGWR, archiver.对于连接到数据库实例的每个会话,该视图都有一行。这些会话包括用户会话,以及DBWR、LGWR、archiver等后台进程。   

1、SADDR  --Session address Session当前会话在内存(pga)中的地址

2、SID --Session identifier Session ID 会话标识符

3、SERIAL# 
      官方解释:Session serial number. Used to uniquely identify a session's objects. Guarantees that session-level commands are applied to the correct session objects if the session ends and another session begins with the same session ID.
      sid 会重用,但是同一个SID被重用时,serial#会增加,不会重复。
      比如说你在10:00时发现有一个SID 10 ,serial#为100的session 不正常,想杀掉他,要是直接用kill sid 10 ,而同时这个session 主动退出,新session近来 而又正好用了 10这个SID (这时新session的serial#不会=100,只会比100高),就会发生误杀的情况。所以Oracle要求我们在杀session时,必须同时指定sid和serial#。从另外一个角度上说,sid 在同一个instance的当前session中是一个unique key, 而sid ,serial#则是在整个instance生命期内的所有session中是unique key。(不考虑serial#超过最大值,重用的情况)

3、AUDSID --Auditing session ID 该会话对应的审计会话的id号,对应的是dba_audit_session的sessionid字段,可以查看会话产生时间,数据库实例ID以及对应的服务器进程。

 4、paddr ,这个我们要和saddr、taddr一起讲一下

      saddr(session address):表示当前记录的内存地址;
      paddr(process address):该session对应的进程地址,关联v$process的addr字段,可以通过这个字段查处当前session对应操作系统的那个进程的id;
      taddr(transation address):当前有活动事务的地址,关联v$transaction表的addr,通过这个字段关联查出当前session正在使用的回滚段的情况,以及当前事务的大小等信息

5、USER#USERNAME 表示登录的用户名编号和用户名,比如说sytem、test等,如果没有说明是后台进程产生的session。

      比如说:QMNC、MMON 、MMNL 等后台经常,这是时候我们可以看看v$session 的PROGRAM字段。

6、COMMAND --正在执行的当前命令类型,记录的是一个数值,要结合下表进行查看 Table 7-5. These values also appear in the AUDIT_ACTIONS table.

Number

Command

Number

Command

1

CREATE TABLE

2

INSERT

3

SELECT

4

CREATE CLUSTER

5

ALTER CLUSTER

6

UPDATE

7

DELETE

8

DROP CLUSTER

9

CREATE INDEX

10

DROP INDEX

11

ALTER INDEX

12

DROP TABLE

13

CREATE SEQUENCE

14

ALTER SEQUENCE

15

ALTER TABLE

16

DROP SEQUENCE

17

GRANT OBJECT

18

REVOKE OBJECT

19

CREATE SYNONYM

20

DROP SYNONYM

21

CREATE VIEW

22

DROP VIEW

23

VALIDATE INDEX

24

CREATE PROCEDURE

25

ALTER PROCEDURE

26

LOCK

27

NO-OP

28

RENAME

29

COMMENT

30

AUDIT OBJECT

31

NOAUDIT OBJECT

32

CREATE DATABASE LINK

33

DROP DATABASE LINK

34

CREATE DATABASE

35

ALTER DATABASE

36

CREATE ROLLBACK SEG

37

ALTER ROLLBACK SEG

38

DROP ROLLBACK SEG

39

CREATE TABLESPACE

40

ALTER TABLESPACE

41

DROP TABLESPACE

42

ALTER SESSION

43

ALTER USER

44

COMMIT

45

ROLLBACK

46

SAVEPOINT

47

PL/SQL EXECUTE

48

SET TRANSACTION

49

ALTER SYSTEM

50

EXPLAIN

51

CREATE USER

52

CREATE ROLE

53

DROP USER

54

DROP ROLE

55

SET ROLE

56

CREATE SCHEMA

57

CREATE CONTROL FILE

59

CREATE TRIGGER

60

ALTER TRIGGER

61

DROP TRIGGER

62

ANALYZE TABLE

63

ANALYZE INDEX

64

ANALYZE CLUSTER

65

CREATE PROFILE

66

DROP PROFILE

67

ALTER PROFILE

68

DROP PROCEDURE

70

ALTER RESOURCE COST

71

CREATE MATERIALIZED VIEW LOG

72

ALTER MATERIALIZED VIEW LOG

73

DROP MATERIALIZED VIEW LOG

74

CREATE MATERIALIZED VIEW

75

ALTER MATERIALIZED VIEW

76

DROP MATERIALIZED VIEW

77

CREATE TYPE

78

DROP TYPE

79

ALTER ROLE

80

ALTER TYPE

81

CREATE TYPE BODY

82

ALTER TYPE BODY

83

DROP TYPE BODY

84

DROP LIBRARY

85

TRUNCATE TABLE

86

TRUNCATE CLUSTER

91

CREATE FUNCTION

92

ALTER FUNCTION

93

DROP FUNCTION

94

CREATE PACKAGE

95

ALTER PACKAGE

96

DROP PACKAGE

97

CREATE PACKAGE BODY

98

ALTER PACKAGE BODY

99

DROP PACKAGE BODY

100

LOGON

101

LOGOFF

102

LOGOFF BY CLEANUP

103

SESSION REC

104

SYSTEM AUDIT

105

SYSTEM NOAUDIT

106

AUDIT DEFAULT

107

NOAUDIT DEFAULT

108

SYSTEM GRANT

109

SYSTEM REVOKE

110

CREATE PUBLIC SYNONYM

111

DROP PUBLIC SYNONYM

112

CREATE PUBLIC DATABASE LINK

113

DROP PUBLIC DATABASE LINK

114

GRANT ROLE

115

REVOKE ROLE

116

EXECUTE PROCEDURE

117

USER COMMENT

118

ENABLE TRIGGER

119

DISABLE TRIGGER

120

ENABLE ALL TRIGGERS

121

DISABLE ALL TRIGGERS

122

NETWORK ERROR

123

EXECUTE TYPE

157

CREATE DIRECTORY

158

DROP DIRECTORY

159

CREATE LIBRARY

160

CREATE JAVA

161

ALTER JAVA

162

DROP JAVA

163

CREATE OPERATOR

164

CREATE INDEXTYPE

165

DROP INDEXTYPE

167

DROP OPERATOR

168

ASSOCIATE STATISTICS

169

DISASSOCIATE STATISTICS

170

CALL METHOD

171

CREATE SUMMARY

172

ALTER SUMMARY

173

DROP SUMMARY

174

CREATE DIMENSION

175

ALTER DIMENSION

176

DROP DIMENSION

177

CREATE CONTEXT

178

DROP CONTEXT

179

ALTER OUTLINE

180

CREATE OUTLINE

181

DROP OUTLINE

182

UPDATE INDEXES

183

ALTER OPERATOR

 

     

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 OWNERID——如果值为2147483644,则此列的内容无效。否则此列包含拥有可移植会话的用户标符。对于利用并行从服务器的操作,将这个值解释为一个48 字节的值。其低位两字节表示会话号,而高位字节表示查询协调程序的实例ID。

TADDR——当前有活动事务的地址,关联v$transaction视图的addr可以查出当前session正在使用的回滚段的信息以及当前事务大小等情况。

LOCKWAIT——当前会话正在等待的锁的地址,如果没有等待锁则为null。

 

STATUS——当前会话的状态

       ACTIVE:正在执行SQL语句

      INACTIVE:会话不是活动状态,正在等待要执行的SQL语句。

      KILLED:被标记为已经杀死

      CACHED:会话被oracle *XA缓存起来使用。不是太懂,两端提交?。。

      SNIPED :会话在等待client端的响应。

SERVER——数据库提供服务的方式

      Dedicated:专用服务器模式

      Shared:共享服务器模式

SECHEMA#——模式用户标识符

SECHEMANAME——模式用户名

OSUSER——会话的客户端系统的用户名

PROCESS——会话客户端进程id号,线程号。比如792:800,792代表进程的pid,800代表线程的tid。

  查看客户端的进程:

 查看线程:

MACHINE 操作系统机器名、TERMINAL  操作系统终端名

    可以根据主terminal查询客户端的ip

     select utl_inaddr.get_host_address(terminal) from v$session where username is not null;

PROGRAM  操作系统程序名

     通过本机连接的session,一般都有program。如果是通过服务器连接的session,一般都没有program。

TYPE 会话类型

      一般有两个类型:background(后台进程)、user(用户)

SQL_ADDRESS  对应的是v$sql中的addresss

       Used with SQL_HASH_VALUE to identify the SQL statement that is currently being executed
       当前正在执行的SQL语句的SQL_HASH_VALUE值

SQL_HASH_VALUE 对应的是v$sql中的HASH_VALUE

        Used with SQL_ADDRESS to identify the SQL statement that is currently being executed
        当前正在执行的SQL语句的SQL_ADDRESS值
        SQL_HASH_VALUE,SQL_ADDRESS:这两列用于鉴别默认被session执行的SQL语句。如果为null或0,那就说明这个session没有执行任何SQL语句。PREV_HASH_VALUE和PREV_ADDRESS两列用来鉴别被session执行的上一条语句。

SQL_ID

         SQL identifier of the SQL statement that is currently being executed
         正在执行的SQL语句的标识符

SQL_CHILD_NUMBER

         Child number of the SQL statement that is currently being executed

PREV_......前一句执行的SQL语句的信息。

MODULE——用户通过DBMS_APPLICATION_INFO.SET_MODULE进行的一些设置的名字

MODULE_HASH——MODULE的hash值

ACTION——用户通过DBMS_APPLICATION_INFO.SET_ACTION进行的一些设置的名字

ACTION_HASH——ACTION的HASH值

CLIENT_INFO——用户通过DBMS_APPLICATION_INFO.SET_CLIENT_INFO进行一些设置的相关信息。

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

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

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

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

LOGON_TIME——会话登录的时间

LAST_CALL_ET——如果会话是ACTIVE状态则表示了会话已经持续ACTIVE状态多久。如果会话是INACTIVE状态则表示会话已经处于INACTIVE状态多久。

PDML_ENABLED——这列已经被PDML_STATUS列取代,那么PDML_STATUS列代表了什么。如果是ENABLED则代表了这个会话执行DML语句可以使用oracle的并行执行技术,如果是DISABLE则代表了这个会话执行DDL语句禁止使用oracle并行执行技术。

PDDL_STATUS——和PDML_STATUS差不多,只不过这个是针对DDL语句的。

PQ_STATUS——也和以上两条差不多,只不过这个是针对select语句的。Q代表query。

CURRENT_QUEUE_DURATION——如果值为1则代表session已经在队列中,如果是0则代表还没有形成排队。

CLIENT_IDENTIFIER——客户端会话的标识符。

原文地址:https://www.cnblogs.com/annannan/p/12826407.html