
以下是对 Oracle 19C ASM 中 V$ASM_DISKGROUP_STAT 动态性能视图的权威解析。该视图是 ASM 性能监控的核心组件,提供磁盘组的实时性能统计信息,相比 V$ASM_DISKGROUP 更侧重性能指标。
1. 核心作用
V$ASM_DISKGROUP_STAT 提供磁盘组的实时性能统计和负载指标,主要功能包括:
- 监控磁盘组 I/O 负载(读/写操作)
- 跟踪空间使用变化趋势
- 计算平均 I/O 响应时间
- 检测磁盘组性能瓶颈
- 提供 RAC 环境下的全局统计视图
- 支持存储性能优化决策
📌 定位:
ASM 存储系统的"性能仪表盘",专注于磁盘组级别的实时性能指标采集。
2. 使用场景
- 性能诊断:识别高负载磁盘组
- 容量规划:分析空间使用趋势
- 瓶颈分析:检测 I/O 响应时间异常
- 负载均衡:优化 RAC 环境数据分布
- 存储调优:评估缓存策略效果
- 压力测试:验证存储性能极限
- 基线比较:建立性能基准
3. 字段含义(Oracle 19c 官方文档)
| 列名 | 数据类型 | 说明 |
|---|---|---|
GROUP_NUMBER | NUMBER | 磁盘组编号 |
NAME | VARCHAR2(30) | 磁盘组名称 |
TOTAL_MB | NUMBER | 总空间(MB) |
FREE_MB | NUMBER | 可用空间(MB) |
READS | NUMBER | 读操作总次数 |
WRITES | NUMBER | 写操作总次数 |
READ_TIME | NUMBER | 读操作总时间(厘秒)(1厘秒=0.01秒) |
WRITE_TIME | NUMBER | 写操作总时间(厘秒) |
BYTES_READ | NUMBER | 读取总字节数 |
BYTES_WRITTEN | NUMBER | 写入总字节数 |
READ_ERRS | NUMBER | 读错误次数 |
WRITE_ERRS | NUMBER | 写错误次数 |
READ_TIME_TOTAL | NUMBER | 集群所有实例读总时间(RAC) |
WRITE_TIME_TOTAL | NUMBER | 集群所有实例写总时间(RAC) |
READS_TOTAL | NUMBER | 集群所有实例读操作总数(RAC) |
WRITES_TOTAL | NUMBER | 集群所有实例写操作总数(RAC) |
COLD_BYTES_READ | NUMBER | 冷数据读取字节数(分层存储) |
HOT_BYTES_READ | NUMBER | 热数据读取字节数(分层存储) |
AVG_READ_TIME | NUMBER | 平均读延迟(厘秒)(自动计算:READ_TIME/READS) |
AVG_WRITE_TIME | NUMBER | 平均写延迟(厘秒)(自动计算:WRITE_TIME/WRITES) |
PERCENT_SOFT_READS | NUMBER | 缓存命中率百分比(软读比例) |
LAST_SAMPLE_TIME | TIMESTAMP | 最后采样时间 |
STARTUP_TIME | TIMESTAMP | 统计重置时间(通常为ASM启动时间) |
4. 相关视图与基表
相关视图
| 视图 | 说明 |
|---|---|
V$ASM_DISK_STAT | 磁盘级性能统计 |
V$ASM_FILE_STAT | 文件级性能统计 |
GV$ASM_DISKGROUP_STAT | RAC 全局视图 |
V$ASM_OPERATION | 操作进度(如rebalance) |
V$ASM_DISKGROUP | 磁盘组基本信息 |
基表(X$表)
X$KFGRP_STAT:V$ASM_DISKGROUP_STAT的底层结构-- 查看基表结构(仅供诊断) SELECT * FROM X$KFGRP_STAT WHERE grp = (SELECT group_number FROM v$asm_diskgroup WHERE name = 'DATA');
5. 核心原理
统计采集机制
关键技术细节
-
实时采集:
- 每次 I/O 操作后立即更新计数器
- 统计存储在 SGA 的共享内存区
-
延迟计算:
AVG_READ_TIME=READ_TIME/READSAVG_WRITE_TIME=WRITE_TIME/WRITES
-
RAC 处理:
- 每个实例维护本地统计
GV$视图聚合所有节点数据_TOTAL列提供集群级总和
-
统计重置:
- ASM 实例重启时清零
- 可通过
ALTER SYSTEM FLUSH重置:ALTER SYSTEM FLUSH ASM_DISKGROUP_STAT;
6. 常用 SQL 查询与操作
(1) 查看磁盘组基本性能
SELECT name,
reads,
writes,
ROUND(read_time/100, 2) AS read_sec,
ROUND(write_time/100, 2) AS write_sec
FROM v$asm_diskgroup_stat;
(2) 计算平均 I/O 延迟
SELECT name,
CASE WHEN reads > 0
THEN ROUND(read_time/reads/100, 3)
ELSE 0 END AS avg_read_ms,
CASE WHEN writes > 0
THEN ROUND(write_time/writes/100, 3)
ELSE 0 END AS avg_write_ms
FROM v$asm_diskgroup_stat;
(3) 识别高负载磁盘组
SELECT name,
ROUND((bytes_read + bytes_written)/1024/1024) AS total_mb,
RANK() OVER (ORDER BY (bytes_read + bytes_written) DESC) AS load_rank
FROM v$asm_diskgroup_stat;
(4) 分析分层存储效果
SELECT name,
ROUND(hot_bytes_read / NULLIF(bytes_read, 0) * 100, 2) AS hot_read_pct,
ROUND(cold_bytes_read / NULLIF(bytes_read, 0) * 100, 2) AS cold_read_pct
FROM v$asm_diskgroup_stat
WHERE bytes_read > 0;
(5) 监控缓存效率
SELECT name, percent_soft_reads AS cache_hit_rate
FROM v$asm_diskgroup_stat
WHERE percent_soft_reads < 90; -- 低于90%需关注
(6) RAC 全局负载分析
SELECT name,
reads_total,
writes_total,
ROUND(bytes_read_total/1024/1024) AS read_mb,
ROUND(bytes_written_total/1024/1024) AS write_mb
FROM gv$asm_diskgroup_stat;
(7) 计算吞吐量(MB/s)
SELECT name,
ROUND(bytes_read / (1024*1024) /
((SYSDATE - startup_time) * 86400), 2) AS read_mb_sec,
ROUND(bytes_written / (1024*1024) /
((SYSDATE - startup_time) * 86400), 2) AS write_mb_sec
FROM v$asm_diskgroup_stat;
(8) 检测 I/O 错误
SELECT name, read_errs, write_errs
FROM v$asm_diskgroup_stat
WHERE read_errs > 0 OR write_errs > 0;
(9) 空间变化趋势分析
-- 每小时采样一次
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'DG_STAT_SNAPSHOT',
job_type => 'PLSQL_BLOCK',
job_action => 'INSERT INTO dg_stat_history
SELECT * FROM v$asm_diskgroup_stat',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=HOURLY'
);
END;
/
(10) 性能基线比较
SELECT curr.name,
curr.avg_read_time - base.avg_read_time AS read_lat_diff,
curr.avg_write_time - base.avg_write_time AS write_lat_diff
FROM v$asm_diskgroup_stat curr
JOIN dg_stat_history base
ON curr.group_number = base.group_number
AND base.sample_time = (SELECT MAX(sample_time)
FROM dg_stat_history
WHERE group_number = curr.group_number);
总结
- 核心作用:提供磁盘组实时性能指标
- 关键字段:
READS/WRITES:I/O 操作量READ_TIME/WRITE_TIME:I/O 耗时AVG_READ_TIME/AVG_WRITE_TIME:延迟指标
- 运维价值:
- 最佳实践:
- 定期采集统计建立性能基线
- 关注平均 I/O 延迟 > 20ms 的磁盘组
- RAC 环境中使用
GV$视图全局分析 - 结合
V$ASM_DISK_STAT定位问题磁盘
- 注意事项:
- 统计基于 ASM 实例启动时间
- 高频率查询可能影响性能
- RAC 环境下节点时间需同步
- 闪存缓存统计需启用高级功能
⚠️ 性能诊断黄金法则:
- 读延迟 > 写延迟 → 检查存储阵列缓存
- 写延迟突增 → 检查 rebalance 操作
- 软读率 < 85% → 考虑增加闪存磁盘
- 错误计数 > 0 → 立即检查磁盘健康
欢迎关注我的公众号《IT小Chen》
Oracle数据库V$ASM_DISKGROUP_STAT视图解析
1165

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



