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

今天对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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值