sql執行cpu佔用情況查詢,查表是否已鎖

 

select b.username username,a.disk_reads reads,
    a.executions exec,a.disk_reads/decode(a.executions,0,1,a.executions) rds_exec_ratio,
    a.sql_text Statement,
a.CPU_TIME,a.CPU_TIME/decode(a.executions,0,1,a.executions)
from  v$sqlarea a,dba_users b
where a.parsing_user_id=b.user_id
order by a.CPU_TIME desc;

下面是各個字段的意思:

v$sqlarea:Oracle動態性能表

disk_reads 所有子光標讀取硬盤數據總和
executions  所有子光標的執行數目
sqltext         當前光標的對應的SQL語句的頭1000個字符

cpu_time    該光標用於解析、執行和取數據的cpu時間,單位毫秒

dba_users:用戶信息表

username 用戶名
user_id     用戶id號,是一個數字

這樣的話,用此sql可以查看哪句sql執行太慢,可以考慮進行性能優化。下面介紹下查詢是否鎖表的方法:

1-------查詢當前會話
select case when r.session_id is not NULL and r.status = 'SUSPENDED'then 'Suspended' when
 max(decode(s.serial#,l.serial#,1,0)) = 1 then 'Long Operations' else 'Regular' end, s.sid,s.status,
 s.username, RTRIM(s.osuser), b.spid, s.machine, s.program, s.resource_consumer_group, r.timeout
from v$session s, v$session_longops l, v$process b, dba_resumable r
where (s.sid = l.sid(+)) and (s.sid = r.session_id(+)) and s.paddr=b.addr
and  s.status='ACTIVE'
group by r.session_id, r.error_number, r.status, s.sid,
  s.status, s.username, s.osuser, b.spid, s.machine,
         s.program,s.resource_consumer_group, r.timeout;

2-----獲取對話地址及hash值
select  decode(sql_address,'00',prev_sql_addr,sql_address) sql_address,decode(sql_hash_value,0,
        prev_hash_value,sql_hash_value) sql_hash_value
from v$session  where sid =26;

3-----根據對話地址及hash值查詢執行SQL
select distinct piece, sql_text, command_type from v$sqltext_with_newlines
where rawtohex(address)='070000012D441468' and hashvalue='3018797201';

4----查詢對話SERIAL號
SELECT serial#, username, schemaname, osuser, terminal, machine, program, status,type,saddr,
        logon_time,sysdate - last_call_et / 86400, resource_consumer_group 
FROM v$session WHERE sid =26;
5----終止對話
ALTER SYSTEM KILL SESSION '26,35851';  (sid,serial#)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章