Oracle 性能分析與診斷|Oracle 的CPU 使用率診斷
從 v$sysstat 視圖中可以找出Session 使用CPU 的情況,例如,可以統計Parse CPU to totalCPU ratio:該項顯示總的CPU 花費在執行及解析上的比率。如果這項比率較低,說明系統執行了太多的解析。
總的 CPU 花費在執行及解析上的比率 = 1 - (parse time cpu / CPU used by this session),可通過以下SQL 語句統計出該項數據。
select 1-(a.value/b.value)
from v$sysstat a,v$sysstat b
where a.name=parse time cpu and
b.name=CPU used by this session;
如果發現CPU 使用比較多,可用以下語句進一步找出使用CPU 多的用戶Session:
select a.sid,spid,status,substr(a.program,1,40)
prog,a.terminal,osuser,value/60/100 value
from v$session a,v$process b,v$sesstat c
where c.statistic#=12
and c.sid=a.sid
and a.paddr=b.addr
order by value desc;
注意:
SQL 語句中的12 是指cpu used by this session。
再進一步找出使用CPU 多的SQL 語句,可查找指定SPID 正在執行的SQL 語句:
SELECT P.pid pid,S.sid sid,P.spid spid,S.username username,S.osuser
osname,P.serial#
S_#,P.terminal,P.program
program,P.background,S.status,RTRIM(SUBSTR(a.sql_text, 1, 80)) SQL
FROM v$process P, v$session S,v$sqlarea A
WHERE P.addr = s.paddr
AND S.sql_address = a.address (+)
AND P.spid LIKE %&1%;
注意:
在Linux 環境中可以通過ps 查看進程信息,包括pid;而Windows 中任務管理器的PID與Oracle 的v$process 中的pid 不能一一對應。Windows 是多線程伺服器,每個進程包含一系列線程,這點與UNIX 等不同,UNIX 每個Oralce 進程獨立存在,在NT 上所有線程由Oralce 進程衍生。
也可以指定SID 查看正在執行的SQL 語句:
也可以指定SID 查看正在執行的SQL 語句:
SELECT P.pid pid,S.sid sid,P.spid spid,S.username username,S.osuser
osname,P.serial#
S_#,P.terminal,P.program
program,P.background,S.status,RTRIM(SUBSTR(a.sql_text, 1, 80)) SQL
FROM v$process P, v$session S,v$sqlarea A
WHERE P.addr = s.paddr
AND S.sql_address = a.address (+)
AND s.sid = 136;
推薦閱讀: