我的會話session在做什麼?

beatony發表於2012-12-31
當一個使用者坐在終端前提交了一個查詢卻等不出結果,這很是讓人恢心的。他們很希望語句執行正常,
但卻不知道實際上怎麼樣.讓我們找出一個辦法來消除他們的擔心。
 
1.第一個問題當然指的是我們正在提交的是哪個會話?使用者可以在做其他事情用如下的語句得到它:
select sid from v$mystat where rownum =1;

①如果使用者有一個唯一的使用者名稱,那麼你可以用如下的語句得到哪個SID,比如查詢使用者John的SID。
select sid,machine,osuser,module from v$session where username='JOHN';
sid  machine              osuser         module
---- -------------------- -----------------------------
150  MSHOME\JOHN-LAPTOP    JOHN?Weeg     SQL*Plus
 
②如果是共享使用者名稱被使用的情況,需要看一下哪些會話正在執行:
select a.sid,a.last_call_et,b.sql_text from
v$session a , v$sqltext b
where a.usename is not null
 and a.status='ACTIVE'
 and a.sql_address=b.address;
 
③ 我們知道通常情況下語句執行伴隨著等待,正在執行CPU操作或是執行I/O操作。
透過v$sessstat,v$sessio,v$session_wait這三張表我們可以知道一些資訊.
select a.sid,a.value session_cpu,c.physical_reads,
c.consistent_gets,d.event,d.seconds_in_wait
from v$sessstat a, v$statname b, v$sess_io c, v$session_wait d
where a.sid=150
and b.name='CPU used by this session'
and a.statistic# = b.statistic#
and a.sid=c.sid
and a.sid=b.sid;
 
④ 查詢看是否為幾個事件標識存在問題.
select owner,segment_name,segment_type from
(select p1 file#,p2 block# from v$session_wait where sid=150
and event in ('buffer busy waits','db file sequential read','db file scattered read',
'free buffer waits')) b,dba_extents a
where a.file_id = b.file#
and b.block# between a.block_id and (a.block_id + blocks -1);
現在我們可以告訴那些不安的使用者他們執行的語句在等待一些其他的資源。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22578826/viewspace-751931/,如需轉載,請註明出處,否則將追究法律責任。

相關文章