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

在这里插入图片描述

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

核心作用:提供与会话关联的自动工作负载仓库(AWR)操作详细信息,用于监控和诊断特定会话执行的AWR相关任务。


1. 视图核心作用

  • 会话级监控:跟踪会话执行的AWR操作(报告生成、快照创建等)
  • 操作关联:将AWR操作与特定数据库会话绑定
  • 资源分析:测量会话级AWR操作的资源消耗
  • 故障诊断:识别会话执行的AWR操作失败原因
  • 安全审计:验证用户执行的AWR操作权限

📌 注意:此视图提供实时会话级别的AWR操作详情,不同于实例级的AWR视图。


2. 关键使用场景

  1. 实时监控:跟踪会话正在执行的AWR操作
  2. 性能诊断:分析特定会话的AWR操作资源消耗
  3. 故障排查:诊断AWR报告生成失败问题
  4. 权限验证:审计用户执行的AWR操作
  5. 资源控制:识别高消耗的AWR会话
  6. 自动化管理:脚本化监控会话的AWR任务

3. 字段详解 (Oracle 19c)

字段名数据类型说明
SIDNUMBER会话标识符
SERIAL#NUMBER会话序列号(与SID共同唯一标识会话)
OPERATION_IDNUMBERAWR操作ID(关联V$AW_CALC.OPERATION_ID)
OPERATION_TYPEVARCHAR2(30)操作类型AWR_REPORT/ADDM_ANALYSIS/SNAPSHOT/PURGE
START_TIMETIMESTAMP操作开始时间
LAST_UPDATE_TIMETIMESTAMP最后更新时间
ELAPSED_TIMENUMBER已耗时(秒)
PROGRESSNUMBER完成百分比(0-100)
STATUSVARCHAR2(15)操作状态RUNNING/COMPLETED/FAILED/CANCELLED
CPU_USED_SECNUMBERCPU消耗时间(秒)
PGA_MEMORY_MBNUMBERPGA内存使用(MB)
SQL_IDVARCHAR2(13)关联的SQL ID(用于报告生成的SQL)
DBIDNUMBER数据库标识符
INST_IDNUMBERRAC实例ID
USERNAMEVARCHAR2(30)执行操作的用户名
CLIENT_INFOVARCHAR2(64)客户端信息
MODULEVARCHAR2(64)应用程序模块名
ACTIONVARCHAR2(64)应用程序动作名
ERROR_CODENUMBER错误代码(ORA-错误号)
ERROR_MESSAGEVARCHAR2(4000)详细错误信息

4. 相关视图与基表

关联视图
  • GV$AW_SESSION_INFO:集群所有实例的会话AWR信息
  • V$SESSION:会话详细信息(SIDSERIAL#关联)
  • V$AW_CALC:AWR计算操作详情
  • V$SQL:关联的SQL语句
  • V$ACTIVE_SESSION_HISTORY:操作期间的会话活动历史
底层基表
  • X$KEWMSESOP:会话AWR操作内存结构
  • WRH$_SESSION_OP:AWR会话操作历史表
    SELECT * FROM WRH$_SESSION_OP WHERE sid = 123;
    

5. 核心原理

会话操作跟踪机制
SessionAWR APIV$AW_SESSION_INFOAWR引擎调用DBMS_WORKLOAD_REPOSITORY注册会话操作执行操作返回进度更新状态返回结果SessionAWR APIV$AW_SESSION_INFOAWR引擎
关键特性
  1. 会话绑定:操作与发起会话严格绑定
  2. 实时更新:操作状态每3秒更新一次
  3. 资源隔离:每个会话的操作资源独立统计
  4. 自动清理:会话结束后记录保留5分钟
  5. 错误传播:操作错误直接关联到会话

6. 常用操作SQL

查看会话的AWR操作
SELECT 
    s.sid,
    s.serial#,
    a.operation_type,
    a.progress || '%' AS progress,
    ROUND(a.elapsed_time) AS sec,
    a.status
FROM V$AW_SESSION_INFO a
JOIN V$SESSION s ON a.sid = s.sid AND a.serial# = s.serial#
WHERE s.username = 'REPORT_USER';
监控运行中的AWR报告生成
SELECT 
    sid,
    serial#,
    operation_type,
    TO_CHAR(start_time, 'HH24:MI:SS') AS start,
    ROUND(elapsed_time) AS elapsed_sec,
    progress || '%' AS progress
FROM V$AW_SESSION_INFO
WHERE operation_type = 'AWR_REPORT'
  AND status = 'RUNNING';
诊断失败操作
SELECT 
    sid,
    serial#,
    username,
    error_code,
    error_message,
    module,
    action
FROM V$AW_SESSION_INFO
WHERE status = 'FAILED'
  AND start_time > SYSDATE - 1/24;  -- 最近1小时
关联SQL内容
SELECT 
    a.sid,
    a.operation_type,
    s.sql_text,
    a.progress
FROM V$AW_SESSION_INFO a
JOIN V$SQL s ON a.sql_id = s.sql_id
WHERE a.status = 'RUNNING';
分析资源消耗
SELECT 
    username,
    operation_type,
    COUNT(*) AS total_ops,
    AVG(elapsed_time) AS avg_sec,
    MAX(pga_memory_mb) AS max_pga_mb,
    SUM(cpu_used_sec) AS total_cpu_sec
FROM V$AW_SESSION_INFO
GROUP BY username, operation_type
ORDER BY total_cpu_sec DESC;
终止问题操作
-- 先识别问题会话
SELECT sid, serial# 
FROM V$AW_SESSION_INFO 
WHERE status = 'RUNNING' 
  AND elapsed_time > 600;  -- 运行超过10分钟

-- 终止会话
ALTER SYSTEM KILL SESSION '123,45678';

注意事项

  1. 数据生命周期

    • 活动记录在内存中维护
    • 历史数据存储在WRH$_SESSION_OP(保留期同AWR快照)
    • 会话断开后记录保留5分钟
  2. 权限要求

    GRANT SELECT ON V_$AW_SESSION_INFO TO monitor_user;
    
  3. 性能影响

    • 高频率查询可能增加开销
    • 建议监控间隔 > 10秒
  4. RAC环境

    • 操作在会话所在实例跟踪
    • 使用GV$AW_SESSION_INFO全局视图
    SELECT inst_id, COUNT(*) 
    FROM gv$aw_session_info 
    WHERE status = 'RUNNING'
    GROUP BY inst_id;
    
  5. 常见错误处理

    错误代码原因解决方案
    ORA-04030内存不足增加PGA_AGGREGATE_TARGET
    ORA-01555快照过旧增加UNDO_RETENTION
    ORA-20000无效参数检查输入参数
  6. 最佳实践

    • 限制用户权限:
      REVOKE EXECUTE ON DBMS_WORKLOAD_REPOSITORY FROM public;
      
    • 设置资源限制:
      CREATE PROFILE awr_user LIMIT PGA_AGGREGATE_LIMIT 2G;
      ALTER USER report_user PROFILE awr_user;
      
    • 自动化监控:
      BEGIN
        DBMS_SCHEDULER.CREATE_JOB(
          job_name => 'MONITOR_AWR_SESSIONS',
          job_type => 'PLSQL_BLOCK',
          job_action => 'BEGIN monitor_awr_sessions(); END;',
          start_date => SYSTIMESTAMP,
          repeat_interval => 'FREQ=MINUTELY; INTERVAL=5'
        );
      END;
      
  7. 诊断工具集成

    SELECT 
        ash.sample_time,
        ash.event,
        ash.wait_time,
        a.operation_type
    FROM V$ACTIVE_SESSION_HISTORY ash
    JOIN V$AW_SESSION_INFO a 
      ON ash.session_id = a.sid 
      AND ash.session_serial# = a.serial#
    WHERE a.operation_id = 12345;
    

💡 高级技巧

  • 实时进度监控:
    SELECT 
        sid,
        serial#,
        operation_type,
        progress,
        TO_CHAR(start_time + NUMTODSINTERVAL(elapsed_time * totalwork / (sofar * 86400), 'HH24:MI:SS') AS est_end
    FROM V$AW_SESSION_INFO
    WHERE sofar > 0;
    
  • 操作性能基线:
    CREATE TABLE awr_op_baseline AS
    SELECT operation_type, AVG(elapsed_time) avg_time, PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY elapsed_time) p95_time
    FROM V$AW_SESSION_INFO
    WHERE status = 'COMPLETED';
    

通过V$AW_SESSION_INFO,DBA可以精确监控会话级别的AWR操作,实现精细化的性能诊断和资源管理,确保AWR相关任务的稳定执行。

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值