AIX平台下的ORACLE服务器有时会发生CPU占用率很高的情况,通过TOPAS发现是固定的一个或几个ORACLE进程在占用CPU资源。这时我们想知道这些一直占用CPU资源的ORACLE进程到底在干些什么。只有知道ORACLE到底在干什么才能判断它这样的动作是否合理,然后给出优化意见。具体的步骤如下:
1.用TOPAS找出占CPU资源最高的一个进程的PID号:如528888.
2.根据PID号找到相应的SID号和SERIAL#:
SQL>select s.sid,s.serial# from v$session s,v$process p
where s.paddr=p.addr and p.spid='528888'
SID SERIAL#
------- ----------
101 23659
通过SID也可以把它当前的运行的SQL找出来:
SELECT sql_text
FROM v$sqltext a
WHERE a.hash_value = (SELECT sql_hash_value
FROM v$session b
WHERE b.SID = '&sid')
ORDER BY piece ASC
3.对这个SESSION生成TRACE文件:
SQL>exec DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(101,23659,true);
4.用TKPROF工具对此TRACE文件进行格式化分析:(TRACE文件在user_dump_dest定义的路径下找最新的)
$tkprof ###.trc mytrc.txt explain=system/manager aggregate=yes sys=no waits=yes sort=fchela
5.对mytrc.txt进行分析。
阅读(1813) | 评论(0) | 转发(0) |