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

在这里插入图片描述

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

核心作用:监控自动工作负载仓库(AWR)的计算操作,提供AWR报告生成、基线计算等操作的执行详情和性能指标。


1. 视图核心作用

  • 计算监控:跟踪AWR报告生成、基线计算等操作的执行状态
  • 性能分析:测量计算操作的资源消耗和执行时间
  • 进度跟踪:实时显示长时间计算操作的完成进度
  • 故障诊断:识别计算失败的原因
  • 资源规划:评估AWR计算对系统的影响

📌 注意:此视图仅在AWR计算操作(如报告生成、基线计算)执行时产生数据,日常查询通常为空。


2. 关键使用场景

  1. 报告生成监控:跟踪AWR/ADDM报告生成进度
  2. 基线计算优化:分析性能基线计算效率
  3. 故障排查:诊断报告生成失败问题
  4. 资源调优:识别高消耗的计算操作
  5. 自动化管理:脚本化监控AWR计算任务
  6. 安全审计:验证计算操作的完整性

3. 字段详解 (Oracle 19c)

字段名数据类型说明
CALC_IDNUMBER计算操作唯一ID
OPERATION_TYPEVARCHAR2(30)操作类型AWR_REPORT/ADDM_REPORT/BASELINE/METRIC_CALC
START_TIMETIMESTAMP计算开始时间
END_TIMETIMESTAMP计算结束时间(NULL表示进行中)
ELAPSED_TIMENUMBER已耗时(秒)
PROGRESSNUMBER完成百分比(0-100)
STATUSVARCHAR2(15)计算状态RUNNING/COMPLETED/FAILED/CANCELLED
DBIDNUMBER数据库标识符
INSTANCE_NUMBERNUMBER实例编号
PARAMETERSVARCHAR2(4000)计算参数(JSON格式)
CPU_USEDNUMBERCPU消耗(厘秒)
MEMORY_USEDNUMBER内存使用(字节)
RESULT_SIZENUMBER结果大小(字节)
ERROR_CODENUMBER错误代码(如ORA-错误)
ERROR_MESSAGEVARCHAR2(4000)错误详细信息

4. 相关视图与基表

关联视图
  • GV$AW_CALC:集群所有实例的计算操作
  • DBA_HIST_SNAPSHOT:AWR快照元数据
  • V$SESSION_LONGOPS:长时间操作进度
  • V$ACTIVE_SESSION_HISTORY:计算期间的会话活动
  • DBA_HIST_BASELINE:性能基线信息
底层基表
  • X$KEWMCALC:AWR计算操作内存结构
  • WRH$_CALC_OPERATION:AWR计算历史存储表
    SELECT * FROM WRH$_CALC_OPERATION WHERE calc_id = 12345;
    

5. 核心原理

计算操作流程
UserDBMS_WORKLOAD_REPOSITORYAWR引擎V$AW_CALC数据处理用户调用报告生成创建计算任务注册计算操作执行计算返回结果返回报告/结果更新状态UserDBMS_WORKLOAD_REPOSITORYAWR引擎V$AW_CALC数据处理用户
计算类型详解
操作类型描述
AWR_REPORT生成HTML/TEXT格式的AWR报告
ADDM_REPORT生成自动数据库诊断监控报告
BASELINE计算性能基线(移动窗口基线等)
METRIC_CALC计算衍生性能指标(如平均活动会话预测)
COMPARE_REPORT生成AWR比较报告
资源管理机制
  1. 内存分配:使用PGA内存进行数据排序和聚合
  2. 并行处理:对大型数据集启用并行查询
  3. 中断恢复:支持操作暂停/恢复(DBMS_WORKLOAD_REPOSITORY.INTERRUPT_CALCULATION
  4. 资源限制:受PGA_AGGREGATE_TARGETSGA_TARGET约束

6. 常用操作SQL

查看运行中的计算操作
SELECT 
    calc_id,
    operation_type,
    ROUND(elapsed_time) AS sec,
    progress || '%' AS progress,
    TO_CHAR(start_time, 'YYYY-MM-DD HH24:MI:SS') AS start_time
FROM V$AW_CALC
WHERE status = 'RUNNING';
监控报告生成进度
SELECT 
    calc_id,
    operation_type,
    progress,
    ROUND(elapsed_time) AS sec,
    ROUND(memory_used/1024/1024) AS mem_mb
FROM V$AW_CALC
WHERE operation_type = 'AWR_REPORT'
  AND status = 'RUNNING';
分析失败的计算操作
SELECT 
    calc_id,
    operation_type,
    error_code,
    error_message,
    TO_CHAR(start_time, 'YYYY-MM-DD HH24:MI') AS start_time
FROM V$AW_CALC
WHERE status = 'FAILED'
  AND start_time > SYSDATE - 1;
关联快照信息
SELECT 
    c.calc_id,
    c.operation_type,
    s.snap_id,
    s.begin_interval_time,
    s.end_interval_time
FROM V$AW_CALC c
JOIN DBA_HIST_SNAPSHOT s
  ON c.dbid = s.dbid
 AND JSON_VALUE(c.parameters, '$.start_snap') = s.snap_id
WHERE c.operation_type = 'AWR_REPORT';
检查高资源消耗操作
SELECT 
    operation_type,
    COUNT(*) AS total_ops,
    AVG(elapsed_time) AS avg_sec,
    MAX(cpu_used/100) AS max_cpu_sec,
    MAX(memory_used/1024/1024) AS max_mem_mb
FROM V$AW_CALC
GROUP BY operation_type
ORDER BY MAX(elapsed_time) DESC;
取消长时间运行操作
-- 获取运行超时的计算ID
SELECT calc_id 
FROM V$AW_CALC 
WHERE status = 'RUNNING' 
  AND elapsed_time > 600;  -- >10分钟

-- 取消计算
BEGIN
  DBMS_WORKLOAD_REPOSITORY.INTERRUPT_CALCULATION(calc_id => 12345);
END;
生成历史性能分析
SELECT 
    operation_type,
    TRUNC(start_time) AS day,
    AVG(elapsed_time) AS avg_time,
    PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY elapsed_time) AS p95_time
FROM V$AW_CALC
WHERE status = 'COMPLETED'
GROUP BY operation_type, TRUNC(start_time)
ORDER BY day DESC;

注意事项

  1. 数据生命周期

    • 活动计算数据在内存中维护
    • 历史数据存储在WRH$_CALC_OPERATION(保留期同AWR快照)
    • 实例重启后活动计算记录丢失
  2. 性能影响

    • 大型报告生成可能消耗大量CPU和内存
    • 高峰期间避免执行多个计算操作:
      SELECT COUNT(*) FROM V$AW_CALC WHERE status = 'RUNNING';
      
  3. RAC环境

    • 计算在请求发起的实例执行
    • 使用GV$AW_CALC查看集群范围操作
    • 跨实例报告需要全局协调
  4. 参数说明

    /* 典型PARAMETERS值示例 */
    {
      "report_type": "html",
      "start_snap": 12345,
      "end_snap": 12346,
      "dbid": 1234567890,
      "baseline_name": "PEAK_HOURS"
    }
    
  5. 最佳实践

    • 限制报告时间范围:
      EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_AWR_REPORT(..., num_days=>1);
      
    • 安排非高峰执行:
      BEGIN
        DBMS_SCHEDULER.CREATE_JOB(
          job_name => 'NIGHTLY_AWR',
          job_type => 'PLSQL_BLOCK',
          job_action => 'BEGIN DBMS_WORKLOAD_REPOSITORY.CREATE_AWR_REPORT(...); END;',
          start_date => TRUNC(SYSDATE)+22/24, -- 晚上10点
          repeat_interval => 'FREQ=DAILY'
        );
      END;
      
  6. 错误处理

    -- 常见错误及处理
    SELECT 
        error_code,
        COUNT(*) AS occurances,
        MAX(error_message) AS sample_error
    FROM V$AW_CALC
    WHERE status = 'FAILED'
    GROUP BY error_code;
    
    错误代码原因解决方案
    ORA-01555快照过期增加UNDO保留时间
    ORA-04030内存不足增加PGA_AGGREGATE_TARGET
    ORA-20000无效参数验证输入参数

💡 诊断技巧

  • 实时监控长时间操作:
    SELECT s.sid, s.serial#, c.progress, s.event 
    FROM V$SESSION s
    JOIN V$AW_CALC c ON s.module = 'AWR: '||c.calc_id
    WHERE c.status = 'RUNNING';
    
  • 优化报告性能:
    EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(topnsql=>'MAXIMUM');
    

通过V$AW_CALC,DBA可以全面掌握AWR计算操作的执行状态和性能特征,确保数据库性能诊断基础设施的高效运行。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值