
Oracle 19c: V$AW_SESSION_INFO 动态性能视图详解
核心作用:提供与会话关联的自动工作负载仓库(AWR)操作详细信息,用于监控和诊断特定会话执行的AWR相关任务。
1. 视图核心作用
- 会话级监控:跟踪会话执行的AWR操作(报告生成、快照创建等)
- 操作关联:将AWR操作与特定数据库会话绑定
- 资源分析:测量会话级AWR操作的资源消耗
- 故障诊断:识别会话执行的AWR操作失败原因
- 安全审计:验证用户执行的AWR操作权限
📌 注意:此视图提供实时会话级别的AWR操作详情,不同于实例级的AWR视图。
2. 关键使用场景
- 实时监控:跟踪会话正在执行的AWR操作
- 性能诊断:分析特定会话的AWR操作资源消耗
- 故障排查:诊断AWR报告生成失败问题
- 权限验证:审计用户执行的AWR操作
- 资源控制:识别高消耗的AWR会话
- 自动化管理:脚本化监控会话的AWR任务
3. 字段详解 (Oracle 19c)
| 字段名 | 数据类型 | 说明 |
|---|---|---|
SID | NUMBER | 会话标识符 |
SERIAL# | NUMBER | 会话序列号(与SID共同唯一标识会话) |
OPERATION_ID | NUMBER | AWR操作ID(关联V$AW_CALC.OPERATION_ID) |
OPERATION_TYPE | VARCHAR2(30) | 操作类型:AWR_REPORT/ADDM_ANALYSIS/SNAPSHOT/PURGE |
START_TIME | TIMESTAMP | 操作开始时间 |
LAST_UPDATE_TIME | TIMESTAMP | 最后更新时间 |
ELAPSED_TIME | NUMBER | 已耗时(秒) |
PROGRESS | NUMBER | 完成百分比(0-100) |
STATUS | VARCHAR2(15) | 操作状态:RUNNING/COMPLETED/FAILED/CANCELLED |
CPU_USED_SEC | NUMBER | CPU消耗时间(秒) |
PGA_MEMORY_MB | NUMBER | PGA内存使用(MB) |
SQL_ID | VARCHAR2(13) | 关联的SQL ID(用于报告生成的SQL) |
DBID | NUMBER | 数据库标识符 |
INST_ID | NUMBER | RAC实例ID |
USERNAME | VARCHAR2(30) | 执行操作的用户名 |
CLIENT_INFO | VARCHAR2(64) | 客户端信息 |
MODULE | VARCHAR2(64) | 应用程序模块名 |
ACTION | VARCHAR2(64) | 应用程序动作名 |
ERROR_CODE | NUMBER | 错误代码(ORA-错误号) |
ERROR_MESSAGE | VARCHAR2(4000) | 详细错误信息 |
4. 相关视图与基表
关联视图
GV$AW_SESSION_INFO:集群所有实例的会话AWR信息V$SESSION:会话详细信息(SID和SERIAL#关联)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. 核心原理
会话操作跟踪机制
关键特性
- 会话绑定:操作与发起会话严格绑定
- 实时更新:操作状态每3秒更新一次
- 资源隔离:每个会话的操作资源独立统计
- 自动清理:会话结束后记录保留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';
注意事项
-
数据生命周期:
- 活动记录在内存中维护
- 历史数据存储在
WRH$_SESSION_OP(保留期同AWR快照) - 会话断开后记录保留5分钟
-
权限要求:
GRANT SELECT ON V_$AW_SESSION_INFO TO monitor_user; -
性能影响:
- 高频率查询可能增加开销
- 建议监控间隔 > 10秒
-
RAC环境:
- 操作在会话所在实例跟踪
- 使用
GV$AW_SESSION_INFO全局视图
SELECT inst_id, COUNT(*) FROM gv$aw_session_info WHERE status = 'RUNNING' GROUP BY inst_id; -
常见错误处理:
错误代码 原因 解决方案 ORA-04030 内存不足 增加PGA_AGGREGATE_TARGET ORA-01555 快照过旧 增加UNDO_RETENTION ORA-20000 无效参数 检查输入参数 -
最佳实践:
- 限制用户权限:
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;
- 限制用户权限:
-
诊断工具集成:
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》
2021

被折叠的 条评论
为什么被折叠?



