【Oracle】詳解v$session


首先查看一下v$session都存在哪些列

SYS@ORCL>desc v$session

 Name                                      Null?    Type

 ----------------------------------------- -------- ----------------------------

 SADDR                                              RAW(4)

 SID                                                NUMBER

 SERIAL#                                            NUMBER

 AUDSID                                             NUMBER

 PADDR                                              RAW(4)

 USER#                                              NUMBER

 USERNAME              2                             VARCHAR2(30)

 COMMAND                                            NUMBER

 OWNERID                                            NUMBER

 TADDR                                              VARCHAR2(8)

 LOCKWAIT                                           VARCHAR2(8)

 STATUS                                             VARCHAR2(8)

 SERVER                                             VARCHAR2(9)

 SCHEMA#                                            NUMBER

 SCHEMANAME                                         VARCHAR2(30)

 OSUSER                                             VARCHAR2(30)

 PROCESS                                            VARCHAR2(12)

 MACHINE                                            VARCHAR2(64)

 TERMINAL                                           VARCHAR2(30)

 PROGRAM                                            VARCHAR2(48)

 TYPE                                               VARCHAR2(10)

 SQL_ADDRESS                                        RAW(4)

 SQL_HASH_VALUE                                     NUMBER

 SQL_ID                                             VARCHAR2(13)

 SQL_CHILD_NUMBER                                   NUMBER

 PREV_SQL_ADDR                                      RAW(4)

 PREV_HASH_VALUE                                    NUMBER

 PREV_SQL_ID                                        VARCHAR2(13)

 PREV_CHILD_NUMBER                                  NUMBER

 MODULE                                             VARCHAR2(48)

 MODULE_HASH                                        NUMBER

 ACTION                                             VARCHAR2(32)

 ACTION_HASH                                        NUMBER

 CLIENT_INFO                                        VARCHAR2(64)

 FIXED_TABLE_SEQUENCE                               NUMBER

 ROW_WAIT_OBJ#                                      NUMBER

 ROW_WAIT_FILE#                                     NUMBER

 ROW_WAIT_BLOCK#                                    NUMBER

 ROW_WAIT_ROW#                                      NUMBER

 LOGON_TIME                                         DATE

 LAST_CALL_ET                                       NUMBER

 PDML_ENABLED                                       VARCHAR2(3)

 FAILOVER_TYPE                                      VARCHAR2(13)

 FAILOVER_METHOD                                    VARCHAR2(10)

 FAILED_OVER                                        VARCHAR2(3)

 RESOURCE_CONSUMER_GROUP                            VARCHAR2(32)

 PDML_STATUS                                        VARCHAR2(8)

 PDDL_STATUS                                        VARCHAR2(8)

 PQ_STATUS                                          VARCHAR2(8)

 CURRENT_QUEUE_DURATION                             NUMBER

 CLIENT_IDENTIFIER                                  VARCHAR2(64)

 BLOCKING_SESSION_STATUS                            VARCHAR2(11)

 BLOCKING_INSTANCE                                  NUMBER

 BLOCKING_SESSION                                   NUMBER

 SEQ#                                               NUMBER

 EVENT#                                             NUMBER

 EVENT                                              VARCHAR2(64)

 P1TEXT                                             VARCHAR2(64)

 P1                                                 NUMBER

 P1RAW                                              RAW(4)

 P2TEXT                                             VARCHAR2(64)

 P2                                                 NUMBER

 P2RAW                                              RAW(4)

 P3TEXT                                             VARCHAR2(64)

 P3                                                 NUMBER

 P3RAW                                              RAW(4)

 WAIT_CLASS_ID                                      NUMBER

 WAIT_CLASS#                                        NUMBER

 WAIT_CLASS                                         VARCHAR2(64)

 WAIT_TIME                                          NUMBER

 SECONDS_IN_WAIT                                    NUMBER

 STATE                                              VARCHAR2(19)

 SERVICE_NAME                                       VARCHAR2(64)

 SQL_TRACE                                          VARCHAR2(8)

 SQL_TRACE_WAITS                                    VARCHAR2(5)

 SQL_TRACE_BINDS                                    VARCHAR2(5)

 

SADDR-——當前會話在內存中的地址

SAD——當前會話的id號

SERIAL# ——會話的串號,當一個會話結束后,另外的會話可能會重用該會話的id號,此時就需要SERIAL#來確定唯一的會話對象。也就是說SID+SERIAL#來確定唯一的會話。

AUDSID——該會話對應的審計會話的id號

PADDR——會話對應的進程地址,關聯v$process視圖的addr字段可以找到會話對應的操作系統進程。

USER#——會話對應用戶的id號,對應dba_users的user_id字段

USERNAME——會話對應用戶的USERNAME

COMMAND——正在執行的當前命令類型,記錄的是一個數值,要結合下表進行查看

Table 7-5 COMMAND Column of V$SESSION and Corresponding Commands

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——當前會話的狀態

l ACTIVE:正在執行SQL語句

l INACTIVE:會話不是活動狀態,正在等待要執行的SQL語句。

l KILLED:被標記為已經殺死

l CACHED:會話被oracle *XA緩存起來使用。不是太懂,兩端提交?。。

l SNIPED :會話在等待client端的響應。

SERVER——數據庫提供服務的方式

l Dedicated:專用服務器模式

l Shared:共享服務器模式

SECHEMA#——模式用戶標識符

SECHEMANAME——模式用戶名

OSUSER——會話的客戶端系統的用戶名

PROCESS——會話客戶端進程id號

附:

關於v$process與v$session中process的理解

說明
    v$session有個process字段,V$PROCESS有個SPID字段,這兩個字段是不是一個意思呢?是不是都代表會話的操作系統進程呢?
官方文檔上的解釋:
SPID      VARCHAR2(12)  Operating system process identifier
PROCESS   VARCHAR2(9)   Operating system client process ID

本文以數據庫服務器安裝在linux上為例進行說明。
    V$PROCESS中的SPID表示的是操作系統的進程,v$session中的process表示客戶端進程ID,即客戶端進程在客戶端機器上的進程ID號。一個表示客戶端進程在客戶端機器上的進程號,一個表示服務器進程在服務器上的進程號。
    連接服務器的會話,發起會話的客戶端進程可能是unix進程,也可能是windows進程。

MACHINE——操作系統機器名

TERMINAL——操作系統系統終端名稱

可以根據主terminal查詢客戶端的ip

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

PROGRAM——操作系統通過什么程序連接oracle。通過本機連接的session,一般都有program。如果是通過服務器連接的session,一般都沒有program。

TYPE——會話的類型。是用戶創建的還是后台進程創建的。

SQL_ADDRESS和SQL_HASH_VALUE——一起來確定正在執行的SQL語句。關聯v$sql,v$sqltext,v$sqlarea。

SQL_ID——正在執行的SQL語句的id

SQL_CHILD_MUMBER——正在執行的SQL語句的子句。

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——客戶端會話的標識符。

 

BLOCKING_SESSION_STATUS 
VALID 狀態valid為正在等待
NO HOLDER 
GLOBAL
NOT IN WAIT
UNKNOWN

發生阻塞時候可以查詢

到了10G,多了blocking_session 和 blocking_session_status字段,可以知道是否被阻塞。如果blocking_session_status字段是VALID,那一個有效的SID會出現在blocking_session 字段。
SQL>  select sid, sql_id,  PREV_SQL_ID , BLOCKING_SESSION_STATUS , BLOCKING_SESSION ,WAIT_CLASS_ID,SECONDS_IN_WAIT   ,WAIT_CLASS   from v$session  where
  2   username='KONG';

       SID SQL_ID        PREV_SQL_ID   BLOCKING_SESSION_STATUS           BLOCKING_SESSION WAIT_CLASS_ID SECONDS_IN_WAIT WAIT_CLASS
---------- ------------- ------------- --------------------------------- ---------------- ------------- --------------- ----------------------------------------------------------------
       290 0hcsvq77pq2a8 dyk4dprp70d74 VALID                                          300    4217450380             118 Application
       300               0hcsvq77pq2a8 NO HOLDER                                             2723168908             124 Idle
可以看到290 的進程被300的進程阻塞。

在以前如果想要查詢某個session執行了那個sql語句,那需要用兩個字段來查詢: HASH_VALUE和ADDRESS。現在只有一個SQL_ID就可以了。
SQL> select  sql_text from v$sqltext st, v$session s
  2  where (st.sql_id = s.sql_id ) and s.sid=300;

SQL_TEXT
----------------------------------------------------------------
select count(*) from t2

 

BLOCKING_INSTANCE——模塊化的實例標識符
BLOCKING_SESSION——模塊化的session標識符
SEQ#——不唯一的標示每個等待的序列號
EVENT#——事件數量
EVENT——oracle的session正在等待的數據或者事件

P1TEXT——首個附加參數的描述
P1——首個附加參數
P1RAW——首個附加參數和前一個區別我還不是很懂
P2TEXT——第二個附加參數的描述
P2——第二個附加參數
P2RAW——第二個附加參數
P3TEXT——第三個附加參數的描述
P3——第三個附加參數
P3RAW——第三個附加參數

WAIT_CLASS_ID——標記等待事件種類
WAIT_CLASS#——等待事件的種類
WAIT_CLASS——等待事件的名稱
WAIT_TIME——非0代表上一次session上次等待時間,0代表session當前正在等待
SECONDS_IN_WAIT——等待的時間

oracle文檔的資料:
  If WAIT_TIME = 0, then SECONDS_IN_WAIT is the seconds spent in the
  current wait condition. If WAIT_TIME > 0, then SECONDS_IN_WAIT is the
  seconds since the start of the last wait, and SECONDS_IN_WAIT - WAIT_
  TIME / 100 is the active seconds since the last wait ended.

STATE

0 - WAITING (the session is currently waiting)
-2 - WAITED UNKNOWN TIME (duration of last wait is unknown)
-1 - WAITED SHORT TIME (last wait <1/100th of a second)
>0 - WAITED KNOWN TIME (WAIT_TIME = duration of last wait)


SERVICE_NAME——session的服務名稱
SQL_TRACE——標示sql是否能被跟蹤
SQL_TRACE_WAITS——標記是否等待事件被跟蹤

SQL_TRACE_BINDS——標記是否綁定跟蹤可用與否


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM