dbms_application_info.set_session_longops过程的使用和v$session_longops

来源:互联网 发布:js怎么给input赋值 编辑:程序博客网 时间:2024/06/04 17:47

对dbms_application_info.set_session_longops过程的使用进行了测试,
测试代码如下:

 DECLARE
 rindex  BINARY_INTEGER;
 slno    BINARY_INTEGER;
 sofar   NUMBER(6,2);
 target  BINARY_INTEGER;
 totwork NUMBER := 100;
BEGIN
  rindex := dbms_application_info.set_session_longops_nohint;

  SELECT object_id
  INTO target
  FROM all_objects
  WHERE object_name = 'PP_TEST' AND owner='TEST_USER';

  FOR i IN 1 .. totwork
  LOOP
    sofar := i;
    dbms_application_info.set_session_longops(rindex, slno,
    'ZHP', target, 0, sofar, 100, 'Pct Complete');

    INSERT INTO pp_test(c1) VALUES (i);

    dbms_lock.sleep(8);
  END LOOP;
  COMMIT;
 END;
 
执行过程中和执行执行之后,查询v$session_longops都没有任何记录,根据oracle
官方文档:http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/dynviews_2092.htm#REFRN30227
的说明,设置TIMED_STATISTICS 为TRUE,并分析了表PP_TEST,查询v$session_longops
表还是没有记录,后来用alter system set sql_trace=true;设置sql_trace为true,查
询v$session_longops表还是没有记录,最后发现是因为STATISTICS_LEVEL设置的问题,
STATISTICS_LEVEL设置为TYPICAL或者ALL,v$session_longops才记录长时间执行的记录。

例如:


SQL> alter system set STATISTICS_LEVEL = TYPICAL;
 
System altered
 
Executed in 0.063 seconds
 
SQL> show parameter STATISTICS_LEVEL
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
statistics_level                     string      TYPICAL
 
SQL> insert into dba_tmp select * from dba_tmp;
 
15059200 rows inserted
 
Executed in 296.235 seconds
 
SQL>
SQL> SELECT start_time, sofar, totalwork, time_remaining, elapsed_seconds
  2  FROM v$session_longops WHERE sid=(SELECT sid FROM v$mystat WHERE ROWNUM=1);
 
START_TIME       SOFAR  TOTALWORK TIME_REMAINING ELAPSED_SECONDS
----------- ---------- ---------- -------------- ---------------
2009/1/5 13     441452     441452              0             297
 
Executed in 0.125 seconds
 
SQL>

 

所以总结如下:

 

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

 

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

 

 1.设置TIMED_STATISTICS或SQL_TRACE参数值为true。

 2.通过ANALYZE或DBMS_STATS数据包收集对象统计信息。
 3.STATISTICS_LEVEL参数设置为TYPICAL或ALL

0 0
原创粉丝点击