熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

如何查詢占CPU高的oracle進程

2022-06-13   來源: Oracle 
oracle占用cpu過高怎麼處理本文將介紹有關oracle進程CPU占用率過高的問題需要了解跟多的朋友可以參考下
首先使用TOP命令傳到占用CPU高的SPID號
PID USERNAME THR PRI NICE SIZE RES STATE TIME CPU COMMAND
oracle K K run H % oracle
oracle K K sleep H % oracle

使用DBA賬戶登錄數據庫使用以下SQL語句查詢:
SELECT * FROM V$PROCESS WHERE spid=;查詢到SQL相關信息
根據以上查詢到的信息使用以下SQL查詢:
SELECT sid program FROM V$SESSION S WHERE EXISTS(SELECT FROM V$PROCESS WHERE spid= AND ADDR = SPADDR);
可以查詢到具體那個客戶端查詢一直在不斷占用ORACLE資源!
最後對這個查詢進行處理!

根據SID查得SQLITPUB

  復制代碼 代碼如下:

  select sql_textITPUB
from v$sqltext
where ahashvalue=(select sql_hash_value
from v$session b
where bSID=&sid)
order by piece ASC;


根據lockwait字段可以查詢當前正在等待的鎖的相關信息

  復制代碼 代碼如下:

  select * from v$lock where kaddr in (select lockwait from v$session where sid= $sid);
(sql_addresssql_hash_value)(prev_sql_addrprev_hash_value) 根據這兩組字段 可以查詢到當前session正在執行的或最近一次執行的sql語句的詳細信息
select * from v$sqltext where address = &sql_address and hash_value = &sql_hash_value;


根據PID查SQL相關信息:

  復制代碼 代碼如下:

  select idserial# usernameosusermachineprogramprocessto_char(logon_timeyyyy/mm/dd hh:mi:ss) logon from v$session where paddr in ( select addr from v$process where spid in(&pid));


根據PID查SQL語句

  復制代碼 代碼如下:

  SELECT ausernameamachineaprogramasidaserial#astatuscpiececsql_text FROM v$session av$process bv$sqltext c WHERE bspid=&spid AND baddr=apaddr AND asql_address=caddress(+) ORDER BY cpiece;


得到進程的sid號

  復制代碼 代碼如下:

  select idserial# usernameosusermachineprogramprocessto_char(logon_timeyyyy/mm/dd hh:mi:ss) logon from v$session where paddr in ( select addr from v$process where spid in(&pid));


得到session的sqltext語句

  復制代碼 代碼如下:

  select sql_text from v$sqltext_with_newlines where hash_value in (select SQL_HASH_VALUE from v$session where paddr in (select addr from v$process where spid= &pid)) order by piece;


From:http://tw.wingwit.com/Article/program/Oracle/201404/30543.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.