龙空技术网

Oracle 性能分析与诊断|Oracle 的CPU 使用率诊断

川石信息 272

前言:

如今各位老铁们对“oracle数据库性能分析”大致比较看重,咱们都想要知道一些“oracle数据库性能分析”的相关文章。那么小编在网络上搜集了一些有关“oracle数据库性能分析””的相关内容,希望姐妹们能喜欢,咱们快快来学习一下吧!

从 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';

标签: #oracle数据库性能分析