天天看點

學習動态性能表 第十篇--V$SESSION_LONGOPS

學習動态性能表

第十篇--V$SESSION_LONGOPS 

本視圖顯示運作超過6秒的操作的狀态。包括備份,恢複,統計資訊收集,查詢等等。

要監控查詢執行進展狀況,你必須使用cost-based優化方式,并且:

l         設定TIMED_STATISTICS或SQL_TRACE參數值為true。

l         通過ANALYZE或DBMS_STATS資料包收集對象統計資訊。

你可以通過DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS過程添加application-specific長運作操作資訊到本視圖。關于DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS的更多資訊可以浏覽:Oracle Supplied PL/SQL Packages and Types Reference。

V$SESSION_LONGOPS列說明

l         SID:Session辨別

l         SERIAL#:Session串号

l         OPNAME:操作簡要說明

l         TARGET:操作運作所在的對象

l         TARGET_DESC:目标對象說明

l         SOFAR:至今為止完成的工作量

l         TOTALWORK:總工作量

l         UNITS:工作量機關

l         START_TIME:操作開始時間

l         LAST_UPDATE_TIME:統計項最後更新時間

l         TIME_REMAINING:預計完成操作的剩餘時間(秒)

l         ELAPSED_SECONDS:從操作開始總花費時間(秒)

l         CONTEXT:前後關系

l         MESSAGE:統計項的完整描述

l         USERNAME:執行操作的使用者ID

l         SQL_ADDRESS:用于連接配接查詢的列

l         SQL_HASH_VALUE:用于連接配接查詢的列

l         QCSID:

示例:

找一較大表,确認該表查詢将超過6秒,哎呀讓它快咱沒把握,讓它慢這可是我的強項啊~~

SQL> set timing on

SQL> create table ttt as select level lv,rownum rn from dual connect by level<10000000;   --建立一個臨時表

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;    --執行一個費時的查詢

        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中是不是已經有記錄了

       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聯系查詢出剛執行的查詢語句。

SQL_TEXT

--------------------------------------------------------------------------------

 select * from (select * from ttt order by lv desc) where rownum<2

Executed in 0.063 seconds