学习动态性能表sql
第十篇--V$SESSION_LONGOPS 2007.6.7session
本视图显示运行超过6秒的操做的状态。包括备份,恢复,统计信息收集,查询等等。app
要监控查询执行进展情况,你必须使用cost-based优化方式,而且:性能
你能够经过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列说明优化
示例:对象
找一较大表,确认该表查询将超过6秒,哎呀让它快咱没把握,让它慢这但是个人强项啊~~ci
SQL> set timing onhash
SQL> create table ttt as select level lv,rownum rn from dual connect by level<10000000; --建立一个临时表it
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