(轉):學習Oracle動態效能表-(12)-V$PROCESS
V$PROCESS
本檢視包含當前系統執行的所有程式資訊。常被用於將oracle或服務程式的程式ID與session之間建立聯絡。在某些情況下非常有用:
1. 如果資料庫瓶頸是系統資源(如:cpu,記憶體),並且佔用資源最多的使用者總是停留在某幾個服務程式,那麼進行如下諸項:
l 找出資源程式
l 找出它們的session,你必須將程式與會話聯絡起來。
l 找出為什麼session佔用瞭如此多的資源
2. 跟蹤檔名是基於服務程式的作業系統程式ID。要找出session的跟蹤檔案,你必須將session與服務程式聯絡起來。
3. 某些事件,如rdbms ipc reply,鑑別session程式的Oracle程式ID在等什麼。要發現這些程式在做什麼,你必須找出它們的session。
4. 你所看到的伺服器上的後臺程式(DBWR,LGWR,PMON等)都是服務程式。要想知道他們在做什麼,你必須找到他們的session。
V$PROCESS中的常用列
l ADDR:程式物件地址
l PID:oracle程式ID
l SPID:作業系統程式ID
V$PROCESS中的連線列
Column View Joined Column(s)
ADDR V$SESSION PADDR
示例:
1. 查詢指定系統使用者在oracle中的session資訊及程式id,假設作業系統使用者為:junsansi
selects.sid,s.SERIAL#, s.username,p.spid
fromv$session s, v$process p
wheres.osuser ='junsansi'
ands.PADDR = p.ADDR
2. 檢視鎖和等待
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
FROMv$locked_object l, dba_objects o, v$session s, v$process p
WHEREl.object_id = o.object_id
ANDl.session_id = s.sidands.paddr = p.addr
ORDERBYo.object_id, xidusnDESC
3.
附註:
在linux環境可以透過ps檢視程式資訊包括pid,windows中工作管理員的PID與v$process中pid不能一一對應,這塊在oracleDocument中也沒有找到介紹,後來google了一下,有資料介紹說是由於windows是多執行緒伺服器,每個程式包含一系列執行緒。這點於unix等不同,Unix每個Oralce程式獨立存在,在Nt上所有執行緒由Oralce程式衍生。
要在windows中顯示oracle相關程式pid,我們可以透過一個簡單的sql語句來實現。
SELECTs.SID, p.pid, p.spid signaled, s.osuser, s.program
FROMv$process p, v$session s
WHEREp.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 |
JSS"junsansi |
PlSqlDev.exe |
9 |
13 |
3420 |
JSS"junsansi |
PlSqlDev.exe |
13 |
14 |
660 |
JSS"junsansi |
PlSqlDev.exe |
還可以透過和v$bgprocess連線查詢到後臺程式的名字:
SELECTs.SID SID, p.spid threadid, p.program processname, bg.NAMENAME
FROMv$process p, v$session s, v$bgprocess bg
WHEREp.addr = s.paddr
ANDp.addr = bg.paddr
ANDbg.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大師寫了一段指令碼getsql.sql,用來獲取指定pid正在執行的sql語句,在此也附註上來。
REM getsql.sql
REM author eygle
REM在上,已知程式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
/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9399028/viewspace-678261/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 學習動態效能表(七)--V$PROCESS
- (轉)Oracle動態效能檢視學習之v$processOracle
- (轉):學習Oracle動態效能表-(10)-V$FILESTATOracle
- (轉):學習Oracle動態效能表-(8)-V$SESSIONOracleSession
- (轉):學習Oracle動態效能表-(5)-V$SESSTATOracle
- (轉)學習Oracle動態效能表-(4)-V$SYSSTATOracle
- (轉):學習Oracle動態效能表-(2)-V$SQLTEXTOracleSQL
- (轉):學習Oracle動態效能表-(1)-V$SQLAREAOracleSQL
- (轉):學習Oracle動態效能表-(21)-V$UNDOSTATOracle
- (轉):學習Oracle動態效能表-(19)-v$rowcacheOracle
- (轉):學習Oracle動態效能表-(18)-V$ROLLSTATOracle
- (轉):學習Oracle動態效能表-(7)-V$SQLTEXT,V$SQLAREAOracleSQL
- [轉]學習Oracle動態效能表-(6)-V$SQLTEXT,V$SQLAREAOracleSQL
- (轉):學習Oracle動態效能表-(22)-V$WAITSTATOracleAI
- 學習oracle動態效能表--v$transactionOracle
- (轉):學習Oracle動態效能表-(20)-V$SYSTEM_EVENTOracle
- (轉):學習Oracle動態效能表-(16)-V$OPEN_CURSOROracle
- (轉):學習Oracle動態效能表-(14)-V$SEGSTAT ,V$SEGMENT_STATISTICSOracle
- (轉):學習Oracle動態效能表-(11)-v$latch$ v$latch_childrenOracle
- (轉):學習Oracle動態效能表-(6)-V$SQL,V$SQL_PLANOracleSQL
- (轉)學習Oracle動態效能表-(3)V$LOCK,V$LOCKED_OBJECTOracleObject
- (轉):學習Oracle動態效能表-(17)-v$parameter & v$system_parameterOracle
- (轉):學習Oracle動態效能表-(13)-V$SESSION_LONGOPSOracleSessionGo
- (轉):學習Oracle動態效能表-(15)-V$DB_OBJECT_CACHEOracleObject
- 學習動態效能表(12)--V$DB_OBJECT_CACHEObject
- (轉):學習Oracle動態效能表-(9)-V$SESSION_WAIT,V$SESSION_EVENTOracleSessionAI
- 學習動態效能表(19)--V$UNDOSTAT
- 學習動態效能表(16)--V$ROWCACHE
- 學習動態效能表(15)--V$ROLLSTAT
- 學習動態效能表(九)--V$FILESTAT
- 學習動態效能表(二)--v$sesstat
- 學習動態效能表(一)--v$sysstat
- 學習動態效能表(五)-v$sessionSession
- 學習動態效能表(五)--V$SESSIONSession
- Oracle 動態效能表 v$session & v$process各個欄位的說明OracleSession
- Oracle動態效能檢視學習之 V$ROLLSTAT -- 轉Oracle
- 學習動態效能表(20)--V$WAITSTATAI
- 學習動態效能表(八)-(1)-v$lock