oracle版本:oracle11g
背景:今天在Linux中的oracle服務上,運用top命令發現許多進程的CPU占有率是100%。
操作步驟:
以進程PID:7851為例
執行以下語句:
方法一:
(1)通過PID,查得相對應的系統進程對應的session id
select sid from v$session where paddr in (select addr from v$process where spid=7851
得到SID:206
(2)根據所得的會話ID查得sql地址和hash值
select sql_address,sql_hash_value from v$session where sid=206
得到:SQL_ADDRESS:6EC554F4 SQL_HASH_VALUE:3141392848
(3)根據sql hash值查得sql語句
select sql_text from v$sqltext where hash_value=3141392848
得到SQL語句:INSERT INTO TEST SELECT * FROM SYS.DBA_OBJECTS 此SQL語句就是此進程CPU占有率過高的語句了。
方法二:
SELECT
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 = 7851))
ORDER BY piece ASC
通過此SQL語句可以直接得出:
INSERT INTO TEST SELECT * FROM SYS.DBA_OBJECTS 此SQL語句就是此進程CPU占有率過高的語句了。