2009年4月23日星期四

Oracle中如何根据进程号查sql语句?

工作需要,要查找耗费资源的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'; --我就不写了,对我来说已经够用了

书上得来终觉浅,绝知此事要躬行 说的没错,知识可以学习,但是能力是锻炼出来的。

记录之,备查

没有评论:

发表评论