oracle中v$session_longops视图介…

来源:互联网 发布:stm32f103ret6编程手册 编辑:程序博客网 时间:2024/05/21 10:02

oraclev$session_longops视图介绍

 

     DBA们经常需要监控数据库中一些花费大量时间的操作,如备份恢复,收集统计信息,排序都会记录在这个视图当中。

       这个视图主要是显示运行时间超过6秒的数据库操作的状态.所以对于数据库监控一些耗时的操作是非常有意义的。并且可以看到某个进程的执行进度。

 

来看看这个视图的结构:

V$SESSION_LONGOPS列说明

 

SIDSession标识

SERIAL#Session串号

OPNAME:操作简要说明

TARGET:操作运行所在的对象

TARGET_DESC:目标对象说明

SOFAR:至今为止完成的工作量

TOTALWORK:总工作量

UNITS:工作量单位

START_TIME:操作开始时间

LAST_UPDATE_TIME:统计项最后更新时间

TIME_REMAINING:预计完成操作的剩余时间()

ELAPSED_SECONDS:从操作开始总花费时间()

CONTEXT:前后关系

MESSAGE:统计项的完整描述

USERNAME:执行操作的用户ID

SQL_ADDRESS:用于连接查询的列

SQL_HASH_VALUE:用于连接查询的列

QCSID

 

示例:

 

创建一个数据量比较大的数据表,如log_

 

执行查询log_,命令如下:

 

SQL> set timing on  

SQL> select count(1) from log_  

   

  COUNT(1)  

----------  

  19999998  

   

Executed in 6.438 seconds  

 

 此时执行如下SQL语句 

select from sys.v$session_longops where t.TARGET like '%LOG_' 

  会发现,执行时间大于6秒的那条记录已经被记录在v$session_longops视图中了.

 

下面利用关联查询可以查询出该SQL语句的完整内容(也就是能查询出所有执行时间大于6秒的语句).

 

select from v$sql a,v$session_longops where a.SQL_ID b.SQL_ID  

 

select from v$sqlarea a,v$session_longops where a.HASH_VALUE b.SQL_HASH_VALUE  

 

其中 a.SQL_TEXT 和 a.SQL_FULLTEXT 代表执行的SQL语句.正常SQL_TEXT就可以显示出要查询的SQL语句,如果该语句太长,那么就需要用a.SQL_FULLTEXT字段进行查看.

 

也可以用 v$session_longops 和 v$session 关联查询出其 session 信息.

 

select from v$session a,v$session_longops where a.SID b.SID and a.SERIAL# b.SERIAL#  


****************************


先找PID然后
select sid, program from v$session where paddr in(select addr fromv$process where pid in(53);  

     
查看进度
select sid, serial#, sofar, totalwork
from v$session_longops
where opname = ''
and sofar != totalwork;

 

0 0