工作需要,要查找耗费资源的sql,google了一下,自己实践了一把记录如下
首先:
找到耗费资源的oracle process pid(这里我是根据cpu利用率比较高的那个)记录一下
然后:
select * from v$process where spid='18514'; --18514 为process 号
当然
select addr from v$process where spid='18514'; --已经足够了
查到对应的addr以后
SQL> select addr from v$process where spid='18514';
ADDR
----------------
00000002DEA19B50
根据这个process addr信息
select sql_hash_value,machine,username,program from v$session where PAddr='00000002DEA19B50'; --这里 sql_hash_value已经够了
select sql_hash_value,machine,username,program from v$session where PAddr='00000002DEA19B50';
2948483066 oracle01.example.com SYS sqlplus@oracle01.example.com (TNS V1-V3) --这里sql_hash_value
下一步根据hash_value来查对应的sql, sql_text;
select * from v$sqltext where hash_value='2948483066';
(RAW) 2948483066 dd4rkf6rvwjzu 7 1
(RAW) 2948483066 dd4rkf6rvwjzu 7 0 delete from sys.aud$ where sessionid<=36000000 and rownum <= :rn --这个语句就知道是那个sql占用资源比较大的了
如果不够还可以
select * from v$sqltext where hash_value='sql_has_value'; --我就不写了,对我来说已经够用了
书上得来终觉浅,绝知此事要躬行 说的没错,知识可以学习,但是能力是锻炼出来的。
记录之,备查
2009年4月23日星期四
订阅:
博文评论 (Atom)
没有评论:
发表评论