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 = S
PADDR);
可以查詢到具體那個客戶端查詢一直在不斷占用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