Oracle-估算运行时间长的耗时操作语句
SELECT INST_ID,
USERNAME,
SID,
SERIAL#,
OPNAME,
ROUND(SOFAR * 100 / TOTALWORK, 0) || '%' AS PROGRESS,
SOFAR,
TOTALWORK,
TIME_REMAINING,
SQL_ID
FROM GV$SESSION_LONGOPS
WHERE TIME_REMAINING <> 0
;
SELECT SID, decode(totalwork, 0, 0, round(100 * sofar/totalwork, 2)) "Percent", message "Message", start_time,
elapsed_seconds, time_remaining , inst_id
from GV$Session_longops t
where t.TARGET='XXX' and t.sid = 88
order by t.start_time desc;
V$SESSION_LONGOPS视图记录了执行时间长于6秒的某个操作(可能是备份,恢复,收集统计信息,Hash Join,Sort ,Nested loop,Table Scan, Index Scan 等等),通常使用该视图用来分析SQL运行缓慢的原因,可以配合V$SESSION视图。
注意:必须满足以下2个条件
- 必须将初始化参数 timed_statistics 设置为true或者开启sql_trace
- 必须用ANALYZE或者DBMS_STATS对对象收集过统计信息
视图字段说明:
| 字段 | 说明 |
|---|---|
| SID | Session标识 |
| SERIAL# | Session串号 |
| OPNAME | 操作简要说明 |
| TARGET | 操作运行所在的对象 |
| TARGET_DESC | 目标对象说明 |
| SOFAR | 至今为止完成的工作量 |
| TOTALWORK | 总工作量 |
| UNITS | 工作量单位 |
| START_TIME | 操作开始时间 |
| LAST_UPDATE_TIME | 统计项最后更新时间 |
| TIMESTAMP | 操作的时间戳 |
| TIME_REMAINING | 预计完成操作的剩余时间(秒) |
| ELAPSED_SECONDS | 从操作开始总花费时间(秒) |
| CONTEXT | 前后关系 |
| MESSAGE | 统计项的完整描述 |
| USERNAME | 执行操作的用户ID |
| SQL_ADDRESS | 关联v$sql |
| SQL_HASH_VALUE | 关联v$sql |
| SQL_ID | 关联v$sql |
| QCSID | 主要是并行查询一起使用 |

浙公网安备 33010602011771号