2015年8月20日 星期四

[ORACLE] Oracle v$session_longops 說明

[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/

沒有留言:

張貼留言