(转):学习Oracle动态性能表-(13)-V$SESSION_LONGOPS

上一篇 / 下一篇  2009-09-24 14:02:05 / 个人分类:oracle

V$SESSION_LONGOPS

本视图显示运行超过6秒的操作的状态。包括备份,恢复,统计信息收集,查询等等。

要监控查询执行进展状况,你必须使用cost-based优化方式,并且:

l        设置TIMED_STATISTICSSQL_TRACE参数值为true

l        通过ANALYZEDBMS_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        SIDSession标识

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

Ps:itpub论坛的fenng版版数年前有篇文章描述了v$sessin_longops的来源,有兴趣的朋友可以研究研究:

http://www.dbanotes.net/database/vsession_longops.html


TAG:

 

评分:0

我来说两句

Open Toolbar