1、 先用ps -aux查詢,發(fā)現(xiàn)有個(gè)進(jìn)程占用大量CPU,記錄下PID
2、 用語句SELECT a.username,a.sid,a.serial# FROM v$session a,v$process c
WHERE c.addr=a.paddr and spid=PID
查出相應(yīng)的SESSION
3、 用語句select * from v$session_wait where sid=...
就查出等待事件是什么。
以上操作其實(shí)還可以用一個(gè)sql實(shí)現(xiàn):
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 = '&pid'))
ORDER BY piece ASC
/
這里我們涉及了3個(gè)視圖,并應(yīng)用其關(guān)聯(lián)進(jìn)行數(shù)據(jù)獲取.
首先需要輸入一個(gè)pid,這個(gè)pid即process id,也就是在Top或ps中我們看到的PID.
通過pid和v$process.spid相關(guān)聯(lián)我們可以獲得Process的相關(guān)信息
進(jìn)而通過v$process.addr和v$session.paddr相關(guān)聯(lián),我們就可以獲得和session相關(guān)的所有信息.
再結(jié)合v$sqltext,我們即可獲得當(dāng)前session正在執(zhí)行的SQL語句.
通過v$process視圖,我們得以把操作系統(tǒng)和數(shù)據(jù)庫關(guān)聯(lián)了起來
聯(lián)系客服