面试宝典:介绍下Oracle数据库动态性能视图 V$AW_LONGOPS

在这里插入图片描述

Oracle 19c: V$AW_LONGOPS 动态性能视图详解

核心作用:监控自动工作负载仓库(AWR)长时间运行的操作进度,提供AWR任务(如快照生成、报告创建、基线计算)的实时执行状态和进度信息。


1. 视图核心作用

  • 进度跟踪:实时显示AWR操作的完成百分比和剩余时间
  • 性能监控:测量操作的执行时间和资源消耗
  • 故障诊断:识别卡住或失败的操作
  • 资源分析:评估AWR操作对系统的影响
  • 操作审计:记录AWR任务的执行历史

📌 注意:此视图是V$SESSION_LONGOPS的AWR专用扩展,专用于监控AWR相关长时间任务。


2. 关键使用场景

  1. 快照生成监控:跟踪慢速AWR快照的进度
  2. 报告创建跟踪:监控大型AWR/ADDM报告的生成过程
  3. 基线操作观察:查看基线计算的执行状态
  4. 故障排查:诊断超时或卡住的AWR操作
  5. 资源规划:评估AWR任务的执行效率
  6. 自动化管理:脚本化监控AWR后台任务

3. 字段详解 (Oracle 19c)

字段名数据类型说明
OPNAMEVARCHAR2(64)操作名称:如’AWR Snapshot’/‘AWR Report’/‘ADDM Analysis’
TARGETVARCHAR2(64)操作目标对象:如快照ID、基线名称
TARGET_DESCVARCHAR2(64)目标描述:补充说明
SOFARNUMBER已完成工作量(单位依赖操作类型)
TOTALWORKNUMBER总工作量
UNITSVARCHAR2(32)工作量单位:‘Blocks’/‘Snapshots’/‘Files’
START_TIMEDATE操作开始时间
LAST_UPDATE_TIMEDATE最后进度更新时间
TIME_REMAININGNUMBER估计剩余时间(秒)(0=未知)
ELAPSED_SECONDSNUMBER已用时间(秒)
CONTEXTNUMBER上下文ID(内部使用)
MESSAGEVARCHAR2(512)进度消息:如’Snapshot generation: 45% complete’
USERNAMEVARCHAR2(30)发起操作的用户
SQL_IDVARCHAR2(13)关联的SQL ID(如报告生成SQL)
INST_IDNUMBERRAC实例ID(仅GV$视图有效)
SIDNUMBER会话ID
SERIAL#NUMBER会话序列号
STATUSVARCHAR2(10)操作状态:‘RUNNING’/‘COMPLETED’/‘STOPPED’

4. 相关视图与基表

关联视图
  • GV$AW_LONGOPS:集群所有实例的AWR长操作
  • V$SESSION_LONGOPS:所有类型长操作(包含AWR操作)
  • V$AW_CALC:AWR计算操作详情
  • DBA_HIST_SNAPSHOT:快照元数据
  • V$ACTIVE_SESSION_HISTORY:操作期间的会话活动
底层基表
  • X$KEWMALONGOPS:AWR长操作内存结构
  • WRH$_LONGOPS:AWR长操作历史存储表
    SELECT * FROM WRH$_LONGOPS WHERE opname LIKE 'AWR%';
    

5. 核心原理

进度跟踪机制
graph TB
    A[开始AWR操作] --> B[注册到V$AW_LONGOPS]
    B --> C[设置TOTALWORK]
    C --> D[定期更新SOFAR]
    D --> E{操作完成?}
    E -->|是| F[标记COMPLETED]
    E -->|否| D
    F --> G[从视图中移除]
关键操作类型
操作名称描述典型单位
AWR Snapshot快照生成‘Snapshots’
AWR ReportAWR报告生成‘Blocks’
ADDM AnalysisADDM分析执行‘Analyses’
AWR Baseline基线创建/删除‘Baselines’
AWR Purge清理过期AWR数据‘Segments’
AWR Export/ImportAWR数据导入导出‘MB’
进度更新规则
  1. 快照生成:每完成一个组件更新一次
  2. 报告生成:每处理100个数据块更新一次
  3. 基线计算:每完成10%进度更新一次
  4. 超时机制:30分钟无更新标记为STOPPED

6. 常用操作SQL

查看所有活动AWR操作
SELECT 
    opname,
    target,
    ROUND(sofar/totalwork*100, 1) AS progress_pct,
    time_remaining AS rem_sec,
    elapsed_seconds AS elapsed_sec,
    message
FROM v$aw_longops
WHERE totalwork > 0 
  AND sofar < totalwork;
监控特定操作进度
SELECT 
    start_time,
    last_update_time,
    sofar,
    totalwork,
    units,
    ROUND((SYSDATE - start_time)*86400) AS current_elapsed
FROM v$aw_longops
WHERE opname = 'AWR Snapshot'
  AND status = 'RUNNING';
诊断卡住操作
SELECT 
    opname,
    target,
    elapsed_seconds,
    message
FROM v$aw_longops
WHERE status = 'RUNNING'
  AND last_update_time < SYSDATE - INTERVAL '10' MINUTE;
关联会话信息
SELECT 
    l.opname,
    s.sid,
    s.serial#,
    s.username,
    s.program,
    s.event,
    l.message
FROM v$aw_longops l
JOIN v$session s ON l.sid = s.sid AND l.serial# = s.serial#
WHERE l.status = 'RUNNING';
计算操作效率
SELECT 
    opname,
    AVG(elapsed_seconds) avg_time,
    MAX(elapsed_seconds) max_time,
    COUNT(*) operation_count
FROM (
    SELECT * FROM v$aw_longops 
    UNION ALL
    SELECT * FROM dba_hist_longops WHERE opname LIKE 'AWR%'
)
WHERE status = 'COMPLETED'
GROUP BY opname;
强制终止卡住操作
-- 先获取会话信息
SELECT sid, serial# 
FROM v$aw_longops 
WHERE opname = 'AWR Report' 
  AND status = 'RUNNING'
  AND elapsed_seconds > 3600;

-- 终止会话
ALTER SYSTEM KILL SESSION 'sid,serial#';

注意事项

  1. 数据生命周期

    • 活动操作数据在内存中维护
    • 历史操作存储在WRH$_LONGOPS(保留期同AWR快照)
    • 实例重启后活动记录丢失
  2. 进度准确性

    • TOTALWORK是预估总量,可能不精确
    • TIME_REMAINING基于线性假设,高负载时可能不准确
    • 复杂操作可能有多个进度阶段
  3. 性能影响

    • 高频率查询可能增加MMON进程负载
    • 建议监控间隔 > 30秒
  4. RAC环境

    • 操作在发起实例跟踪
    • 使用GV$AW_LONGOPS查看集群范围操作
    SELECT inst_id, opname, COUNT(*) 
    FROM gv$aw_longops 
    GROUP BY inst_id, opname;
    
  5. 常见问题诊断

    现象可能原因解决方案
    进度卡在99%最终提交阶段等待5-10分钟
    TIME_REMAINING=0无法预估检查ELAPSED_SECONDS
    操作消失完成或崩溃检查alert.log
  6. 最佳实践

    • 设置操作超时阈值:
      SELECT * FROM v$aw_longops 
      WHERE status='RUNNING' 
        AND elapsed_seconds > 1800; -- >30分钟
      
    • 定期清理历史记录:
      EXEC DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(low_snap_id, high_snap_id);
      
    • 优化慢速快照:
      EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(topnsql=>'DEFAULT');
      
  7. 与ASH集成

    SELECT 
        l.opname,
        ash.session_id,
        ash.session_serial#,
        ash.event,
        ash.wait_time
    FROM v$active_session_history ash
    JOIN v$aw_longops l 
      ON ash.session_id = l.sid 
     AND ash.session_serial# = l.serial#
    WHERE l.status = 'RUNNING';
    

💡 高级技巧

  • 预测完成时间:
    SELECT 
        opname,
        start_time + (elapsed_seconds * totalwork/sofar)/86400 AS est_end_time
    FROM v$aw_longops
    WHERE sofar > 0;
    
  • 自动化警报:
    BEGIN
      DBMS_SERVER_ALERT.SET_THRESHOLD(
        metrics_id => DBMS_SERVER_ALERT.ELAPSED_TIME_PER_CALL,
        warning_operator => DBMS_SERVER_ALERT.OPERATOR_GE,
        warning_value => '1800',  -- 30分钟
        object_type => DBMS_SERVER_ALERT.OBJECT_TYPE_EVENT,
        object_name => 'AWR Long Operation');
    END;
    

通过V$AW_LONGOPS,DBA可以实时掌握AWR后台任务的执行状态,有效管理数据库诊断基础设施,确保性能数据的完整性和及时性。

欢迎关注我的公众号《IT小Chen

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值