您的位置:首页 > 数据库 > Oracle

Oracle故障处理中常用的脚本

2015-02-25 17:07 363 查看
如果发现CPU使用率过高,多半是低效的语句导致的,如何找到这些语句,是我们首要解决的问题:
在linux下,通过top工具获取到CPU消耗较大的Oracle进程ID
top - 16:57:27 up 74 days,  6:50,  5 users,  load average: 0.00, 0.00, 0.00
Tasks: 380 total,   1 running, 378 sleeping,   1 stopped,   0 zombie
Cpu(s):  0.1%us,  0.1%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  16335900k total, 15861788k used,   474112k free,   349740k buffers
Swap: 16778232k total,    93208k used, 16685024k free, 13761144k cached
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                 10604 oracle    20   0 6736m  18m  16m S  0.3  0.1   0:02.28 oracle  10612 oracle    20   0 6736m  19m  17m S  0.3  0.1   0:01.47 oracle
然后通过以下语句获取相应的语句,这里的&pid就是上面top获得进程ID号10604
SELECT /*+ORDERED*/
sql_text
from v$sqltext l
where (l.hash_value, l.address) in
(select decode(sql_hash_value, 0, prev_hash_value, sql_hash_value),
decode(sql_hash_value, 0, prev_sql_addr, sql_address)
from v$session s
where s.paddr =
(select addr from v$process p where p.spid = '&pid'))
order by piece asc;
通过以下脚本获取执行语句的会话和系列号,目的是为跟踪该会话中的详细信息
select sid, serial#, machine
from v$session s
where s.paddr = (select addr from v$process p where p.spid = '&pid');
通过dbms_system包开启跟踪功能:
exec dbms_system.set_sql_trace_in_session(sid,serial#,true);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: