在Oracle中,V$SESSION_LONGOPS视图的作用是什么?

2023-04-27 13:34:49 浏览数 (1)

题目部分

在Oracle中,V$SESSION_LONGOPS视图的作用是什么?

答案部分

在Oracle 11g之前的版本,长时间运行的SQL可以通过监控VSESSION_LONGOPS来观察,当某个操作执行时间超过6秒时,就会被记录在VSESSION_LONGOPS中,通常可以监控到全表扫描、全索引扫描、哈希连接、并行查询等操作。

V$SESSION_LONGOPS查询脚本如下所示:

代码语言:javascript复制
SET LINE 9999  PAGESIZE 9999
COL USERNAME FORMAT A10 
COL SESSION_INFO FORMAT A30
COL TARGET FORMAT A20
COL OPNAME FORMAT A35 
COL MESSAGE FORMAT A80 
COL SOFAR_TOTALWORK FORMAT A20 
COL PROGRESS FORMAT A8

SELECT A.USERNAME, 
       (SELECT NB.SID || ',' || NB.SERIAL# || ',' || PR.SPID || ',' ||NB.OSUSER|| ',' ||NB.STATUS|| ',' ||NB.EVENT
          FROM GV$PROCESS PR, GV$SESSION NB
         WHERE NB.PADDR = PR.ADDR
           AND NB.SID = A.SID
           AND NB.SERIAL# = A.SERIAL#
           AND PR.INST_ID = NB.INST_ID) SESSION_INFO,
       A.TARGET,
       A.OPNAME,
       TO_CHAR(A.START_TIME, 'YYYY-MM-DD HH24:MI:SS') START_TIME,
       ROUND(A.SOFAR * 100 / A.TOTALWORK, 2) || '%' AS PROGRESS,
       (A.SOFAR || ':' || A.TOTALWORK) SOFAR_TOTALWORK,
       A.TIME_REMAINING TIME_REMAINING,
       A.ELAPSED_SECONDS ELAPSED_SECONDS,
       MESSAGE MESSAGE
  FROM GV$SESSION_LONGOPS A
 WHERE A.TIME_REMAINING <> 0
 ORDER BY  A.TIME_REMAINING DESC, A.SQL_ID, A.SID;

本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗

0 人点赞