學習動態效能表(七)--V$PROCESS
1.如果資料庫瓶頸是系統資源(如:cpu,記憶體),並且佔用資源最多的使用者總是停留在某幾個服務程式,那麼進行如下諸項:
1>.找出資源程式
2>.找出它們的session,你必須將程式與會話聯絡起來。
3>.找出為什麼session佔用瞭如此多的資源
2.SQL跟蹤檔名是基於服務程式的作業系統程式ID。要找出session的跟蹤檔案,你必須將session與服務程式聯絡起來。
3.某些事件,如rdbms ipc reply,鑑別session程式的Oracle程式ID在等什麼。要發現這些程式在做什麼,你必須找出它們的session。
4.你所看到的伺服器上的後臺程式(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,假設作業系統使用者為:junsansi
select s.sid,s.SERIAL#, s.username,p.spid
from v$session s, v$process p
where s.osuser = 'junsansi'
and s.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
FROM v$locked_object l, dba_objects o, v$session s, v$process p
WHERE l.object_id = o.object_id
AND l.session_id = s.sid and s.paddr = p.addr
ORDER BY o.object_id, xidusn DESC
附註:
在linux環境可以透過ps檢視程式資訊包括pid,windows中工作管理員的PID與v$process中pid不能一一對應,這塊在oracleDocument中也沒有找到介紹,後來google了一下,有資料介紹說是由於windows是多執行緒伺服器,每個程式包含一系列執行緒。這點於unix等不同,Unix每個Oralce程式獨立存在,在Nt上所有執行緒由Oralce程式衍生。
要在windows中顯示oracle相關程式pid,我們可以透過一個簡單的sql語句來實現。
SELECT s.SID, p.pid, p.spid signaled, s.osuser, s.program
FROM v$process p, v$session s
WHERE p.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 JSSjunsansi PlSqlDev.exe
9 13 3420 JSSjunsansi PlSqlDev.exe
13 14 660 JSSjunsansi PlSqlDev.exe
還可以透過和 v$bgprocess 連線查詢到後臺程式的名字:
SELECT s.SID SID, p.spid threadid, p.program processname, bg.NAME NAME
FROM v$process p, v$session s, v$bgprocess bg
WHERE p.addr = s.paddr
AND p.addr = bg.paddr
AND bg.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大師寫了一段sql指令碼getsql.sql,用來獲取指定pid正在執行的sql語句,在此也附註上來。
REM getsql.sql
REM author eygle
REM 在windows上,已知程式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/751371/viewspace-561508/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 動態生成表-判斷表是否存在效能對比
- MyBatis(七) 動態SQLMyBatisSQL
- 設計模式學習筆記(七)代理模式以及動態代理的實現設計模式筆記
- 2024-08-學習《高效能人士的七個習慣》筆記筆記
- (十五) 學習筆記: Python程式(Process)相關筆記Python
- 動態規劃學習筆記動態規劃筆記
- Python學習之旅(七)Python
- 機器學習的靜態特徵和動態特徵機器學習特徵
- 跟我一起學習和開發動態表單系統-動態表單系統的技術實現與優勢(2)
- 【MyBatis學習總結 (五),動態SQL】MyBatisSQL
- 動態元件與v-on元件
- rust學習七、列舉Rust
- 學習Java第七週Java
- JAVA學習第七週Java
- (七) Spring學習總結Spring
- 系統學習iOS動畫之七:其它型別的動畫iOS動畫型別
- 【react】實現動態表單中巢狀動態表單React巢狀
- 李沐動手學深度學習V2-chap_preliminaries深度學習
- Vue.js基礎學習(三) -------------動態繫結v-bind的介紹和使用Vue.js
- ABAP動態內表
- angular動態表單Angular
- 動手學強化學習(四):動態規劃演算法強化學習動態規劃演算法
- Python學習筆記6——動態型別Python筆記型別
- java反射之動態代理學習筆記Java反射筆記
- Python學習七步走Python
- 爬蟲學習日記(七)爬蟲
- java學習(七) —— API集合類JavaAPI
- Redis阻塞(學習筆記七)Redis筆記
- 第七週學習進度
- HexMap學習筆記(七)——道路筆記
- redis學習(七) 訊息通知Redis
- 第七週學習報告
- 學習Java的第七週Java
- Pytorch學習(七)---- 儲存提取PyTorch
- iOS Tangram(VirtualView)動態元件的學習與使用iOSView元件
- Python學習之路38-動態建立屬性Python
- 動態規劃演算法(DP)學習<1>動態規劃演算法
- Java學習筆記——陣列練習(七)Java筆記陣列
- 運籌優化(七)--動態規劃解析優化動態規劃