Oracle 11g中查詢CPU占有率高的SQL


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占有率過高的語句了。

 


免責聲明!

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



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