Oracle 查询最耗资源的SQL语句

 

一。 先通过top命令查看产用资源较多的spid号

 

二。 根据pid查询sql语句

1. 第一种方式,可以查询多个pid

(1) 查询当前耗时的会话ID,用户名,sqlID等,将in ('5648612','256523')); 里面id换成对应的一个或者多个id
select sid,serial#,machine,username,program,sql_hash_value,sql_id,
       to_char(logon_time,'yyyy/mm/dd hh24:mi:ss') as login_time from v$session
where paddr in (select addr from v$process where spid in ('5648612','256523'));


(2) 如果上一步sql_id或者 hash_value不为空,则可用v$sqlarea查出当前正在使用的sql
select sql_text
  from v$sqltext_with_newlines
  where hash_value = &hash_value
order by piece;

2. 第二种方式,一步到位,但是每次只能查询一个pid

SELECT sql_text
  
FROM v$sqltext a
WHERE (a.hash_value, a.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 b
         
WHERE b.paddr = (SELECT addr FROM v$process c WHERE c.spid = '&pid'))
ORDER BY piece ASC

 

posted on 2013-08-09 10:54  babyblue  阅读(464)  评论(0)    收藏  举报