學(xué)習(xí)動(dòng)態(tài)性能表第十篇--V$SESSION_LONGOPS

本視圖顯示運(yùn)行超過6秒的操作的狀態(tài)。包括備份,恢復(fù),統(tǒng)計(jì)信息收集,查詢等等。

要監(jiān)控查詢執(zhí)行進(jìn)展?fàn)顩r,你必須使用cost-based優(yōu)化方式,并且:
設(shè)置TIMED_STATISTICS或SQL_TRACE參數(shù)值為true。
通過ANALYZE或DBMS_STATS數(shù)據(jù)包收集對(duì)象統(tǒng)計(jì)信息。

你可以通過DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS過程添加application-specific長運(yùn)行操作信息到本視圖。關(guān)于DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS的更多信息可以瀏覽:Oracle Supplied PL/SQL Packages and Types Reference。

V$SESSION_LONGOPS列說明

SID:Session標(biāo)識(shí)
SERIAL#:Session串號(hào)
OPNAME:操作簡要說明
TARGET:操作運(yùn)行所在的對(duì)象
TARGET_DESC:目標(biāo)對(duì)象說明
SOFAR:至今為止完成的工作量
TOTALWORK:總工作量
UNITS:工作量單位
START_TIME:操作開始時(shí)間
LAST_UPDATE_TIME:統(tǒng)計(jì)項(xiàng)最后更新時(shí)間
TIME_REMAINING:預(yù)計(jì)完成操作的剩余時(shí)間(秒)
ELAPSED_SECONDS:從操作開始總花費(fèi)時(shí)間(秒)
CONTEXT:前后關(guān)系
MESSAGE:統(tǒng)計(jì)項(xiàng)的完整描述
USERNAME:執(zhí)行操作的用戶ID
SQL_ADDRESS:用于連接查詢的列
SQL_HASH_VALUE:用于連接查詢的列
QCSID:

示例:
找一較大表,確認(rèn)該表查詢將超過6秒,哎呀讓它快咱沒把握,讓它慢這可是我的強(qiáng)項(xiàng)啊~~
SQL> set timing on
SQL> create table ttt as select level lv,rownum rn from dual connect by level<10000000; --創(chuàng)建一個(gè)臨時(shí)表
Table created
Executed in 19.5 seconds
SQL> commit;
Commit complete
Executed in 0 seconds
SQL> select * from (select * from ttt order by lv desc) where rownum<2; --執(zhí)行一個(gè)費(fèi)時(shí)的查詢

LV RN
---------- ----------
9999999 9999999
Executed in 9.766 seconds --哈哈,成功超過6秒
SQL> select sid,opname,sofar,totalwork,units,sql_hash_value from v$session_longops; ----看看v$session_longops中是不是已經(jīng)有記錄了

SID OPNAME SOFAR TOTALWORK UNITS SQL_HASH_VALUE
---------- ---------------------------------------------------------------- ---------- ---------- -------------------------------- --------------
10 Table Scan 47276 47276 Blocks 2583310173
Executed in 0.047 seconds

SQL> select a.sql_text from v$sqlarea a,v$session_longops b where a.HASH_VALUE=b.SQL_HASH_VALUE; --通過hash_value聯(lián)系查詢出剛執(zhí)行的查詢語句。

SQL_TEXT
--------------------------------------------------------------------------------
select * from (select * from ttt order by lv desc) where rownum<2
Executed in 0.063 seconds