[ORACLE][11G][MONITOR][VIEW]
oracle中v$session_longops說明
DBA們經常需要監控資料庫中一些花費大量時間的操作,如備份恢復,收集統計信息,排序都會記錄在這個視圖當中。
這個視圖主要是顯示運行時間超過6秒的資料庫操作的狀態.所以對於資料庫監控一些耗時的操作是非常有意義的。
並且可以看到某個進程的執行進度。
來看看這個視圖的結構:
V$SESSION_LONGOPS列說明
SID:Session標識
SERIAL#:Session串號
OPNAME:操作簡要說明
TARGET:操作運行所在的對象
TARGET_DESC:目標對象說明
SOFAR:至今為止完成的工作量
TOTALWORK:總工作量
UNITS:工作量單位
START_TIME:操作開始時間
LAST_UPDATE_TIME:統計項最後更新時間
TIME_REMAINING:預計完成操作的剩餘時間(秒)
ELAPSED_SECONDS:從操作開始總花費時間(秒)
CONTEXT:前後關係
MESSAGE:統計項的完整描述
USERNAME:執行操作的用戶ID
SQL_ADDRESS:用於連接查詢的列
SQL_HASH_VALUE:用於連接查詢的列
QCSID:
示例:
創建一個數據量比較大的數據表,語句如下:
Sql代碼
create table log_ as select level lv,rownum rn from dual connect by level<10000000;
insert into log_ value select level lv,rownum rn from dual connect by level<10000000;
執行查詢log_表,命令如下:
Sql代碼
SQL> set timing on ;
SQL> select count(1) from log_ t ;
COUNT(1)
----------
19999998
Executed in 6.438 seconds
此時執行如下SQL語句.
Sql代碼
select * from sys.v_$session_longops t where t.TARGET like '%LOG_' ;
會發現,執行時間大於6秒的那條記錄已經被記錄在v_$session_longops視圖中了.
下面利用關聯查詢可以查詢出該SQL語句的完整內容(也就是能查詢出所有執行時間大於6秒的語句).
Sql代碼
select * from v$sql a,v$session_longops b where a.SQL_ID = b.SQL_ID ;
Sql代碼
select * from v$sqlarea a,v$session_longops b where a.HASH_VALUE = b.SQL_HASH_VALUE ;
其中 a.SQL_TEXT 和 a.SQL_FULLTEXT 代表執行的SQL語句.正常SQL_TEXT就可以顯示出要查詢的SQL語句,如果該語句太長,那麼就需要用a.SQL_FULLTEXT欄位進行查看.
也可以用 v$session_longops 和 v$session 關聯查詢出其 session 信息.
Sql代碼
select * from v$session a,v$session_longops b where a.SID = b.SID and a.SERIAL# = b.SERIAL# ;
轉載至:http://codex.wiki/post/114599-279/
沒有留言:
張貼留言