動的パフォーマンス・ビュー

V$SESSIONから現在の状況を確認する

V$SESSION

今流れているSQLの状態を確認する際、まず参照されるのがV$SESSIONです。無条件で出力するとバックグランドプロセスも出力されるのでTYPE=’USER’と条件を入れて参照します。(バックグランドプロセスを分析する際は当然ですがこの限りでありません)当然単体で見る事も多いですが、その他の動的パフォーマンスビューと結合して分析するシーンも多くあります。

select
 w.INST_ID
,w.USERNAME
,w.STATUS
,count(*) count_session
,min(w.LOGON_TIME) min_logon_time
,max(w.LOGON_TIME) max_logon_time
,round(sum(w.PGA_ALLOC_MEM)/1024/1024) PGA_SIZE_MBYTE
,max(w.PGA_MAX_MEM) PGA_MAX_MEM
from
(
    select t.INST_ID,LAST_CALL_ET,t.STATUS
    ,t.USERNAME,t.LOGON_TIME
    ,b.PGA_ALLOC_MEM --現在割り当てられているPGAメモリ
    ,b.PGA_MAX_MEM   -- 割り当て最大
    from gv$session t
    left outer join  gv$process b
    on t.PADDR = b.ADDR and t.INST_ID = b.INST_ID
    where 1=1 
    and t.TYPE='USER'
) w
group by w.INST_ID,w.USERNAME,w.STATUS
order by w.INST_ID,w.USERNAME,w.STATUS
;
項目名解説
SADDRセッションアドレス。V$TEMPSEG_USAGEのSESSION_ADDRと結合すると一時セグメントを利用したか否か、また利用した理由も調べる事できます
SIDセッション識別子。ある断面においてはこの項目だけでユニークになるけれど、使いまわしされるのでSERIAL#まで入れてセッションを特定します。(おそらくですが、インスタンスの再起動がされるとSID+SERIAL#であっても重複の可能性出てくるのでは?)
SERIAL#
STATUSセッションの状態。ACTIVE/INACTIVE/KILLED/CACHED/SNIPED
LAST_CALL_ETSTATUSの状態が切り替わってからの経過時間
EVENTセッションが待機しているリソースおよびイベント。
BLOCKING_SESSION_STATUS ='VALID'の条件で絞るとロックが原因で待ちとなっているセッションを特定できます。
LOGON_TIMEログイン時刻
LAST_CALL_ETセッションの状態(ACTIVE/INACTIVE)が変化してからの経過時間(秒)
スポンサーリンク
コピペで使う