
以下是对 Oracle 19c 中 V$ASM_DISK_STAT 动态性能视图的全面解析:
1. 作用
V$ASM_DISK_STAT 是 ASM 存储管理的核心监控视图,提供:
- ASM 磁盘的 I/O 性能统计(读写延迟、吞吐量、操作次数)
- 磁盘 健康状态 与 错误计数
- 空间利用率 与 分配状态
- 负载均衡 与 热点磁盘 检测
- RAC 环境中的 实例级磁盘访问 分析
📌 与
V$ASM_DISK的区别:
V$ASM_DISK:静态配置信息V$ASM_DISK_STAT:动态性能指标(无需挂载磁盘组即可访问)
2. 使用场景
- 性能诊断:识别存储 I/O 瓶颈
- 故障排查:检测磁盘错误与异常状态
- 负载均衡:分析数据分布均匀性
- 容量规划:监控磁盘空间使用趋势
- RAC 优化:调整实例亲和性(Instance Affinity)
- 存储验证:SAN/NAS 性能问题定位
- 重平衡监控:跟踪
REBALANCE操作进展
3. 字段含义 (Oracle 19c)
| 字段名 | 数据类型 | 说明 |
|---|---|---|
GROUP_NUMBER | NUMBER | 磁盘组编号(未分配时为 NULL) |
DISK_NUMBER | NUMBER | 磁盘在组内的编号 |
INST_ID | NUMBER | 实例 ID(RAC 环境) |
NAME | VARCHAR2(30) | 磁盘名称(ASM 别名) |
PATH | VARCHAR2(4000) | 物理路径(/dev/sdb1,\\.\PHYSICALDRIVE1) |
READS | NUMBER | 读取操作总次数 |
WRITES | NUMBER | 写入操作总次数 |
READ_TIME | NUMBER | 总读取时间(厘秒) |
WRITE_TIME | NUMBER | 总写入时间(厘秒) |
BYTES_READ | NUMBER | 读取总字节数 |
BYTES_WRITTEN | NUMBER | 写入总字节数 |
CREATE_DATE | DATE | 磁盘创建时间 |
MOUNT_DATE | DATE | 最后挂载时间 |
HEADER_STATUS | VARCHAR2(11) | 头状态:MEMBER,CANDIDATE,PROVISIONED,FORMER |
MODE_STATUS | VARCHAR2(7) | 模式状态:ONLINE,OFFLINE |
STATE | VARCHAR2(7) | 磁盘状态:NORMAL,DROPPING,DROPPED |
OS_MB | NUMBER | 操作系统报告的总大小(MB) |
TOTAL_MB | NUMBER | ASM 可用总空间(MB) |
FREE_MB | NUMBER | 剩余可用空间(MB) |
HOT_READS | NUMBER | 热点区域读取次数 |
HOT_WRITES | NUMBER | 热点区域写入次数 |
COLD_READS | NUMBER | 非热点区域读取次数 |
COLD_WRITES | NUMBER | 非热点区域写入次数 |
READ_ERRS | NUMBER | 读取错误计数 |
WRITE_ERRS | NUMBER | 写入错误计数 |
FAILGROUP | VARCHAR2(30) | 故障组名称 |
LABEL | VARCHAR2(255) | 用户定义标签 |
VOTING_FILE | VARCHAR2(3) | 是否包含表决文件:YES/NO |
SECTOR_SIZE | NUMBER | 逻辑扇区大小(字节) |
BLOCK_SIZE | NUMBER | 物理块大小(字节) |
ALLOCATION_UNIT_SIZE | NUMBER | 分配单元大小(字节) |
MOUNT_STATUS | VARCHAR2(7) | 挂载状态:CACHED/UNCACHED |
REDUNDANCY | VARCHAR2(9) | 冗余级别:EXTERN,NORMAL,HIGH |
4. 关键计算指标
- 平均读延迟(毫秒):
(READ_TIME / READS) * 10(1 厘秒 = 10 毫秒) - 平均写延迟(毫秒):
(WRITE_TIME / WRITES) * 10 - 读取吞吐量(MB/s):
BYTES_READ / (1024*1024) / 时间间隔 - 写入吞吐量(MB/s):
BYTES_WRITTEN / (1024*1024) / 时间间隔 - 热点访问比:
(HOT_READS + HOT_WRITES) / (READS + WRITES)
5. 相关视图与基表
- 相关视图:
GV$ASM_DISK_STAT:RAC 全局视图V$ASM_DISK:磁盘静态信息V$ASM_DISK_IOSTAT:细粒度 I/O 统计V$ASM_DISKGROUP_STAT:磁盘组级统计V$ASM_OPERATION:活动操作监控
- 基表:
- 数据源自 ASM 实例内存结构
- 通过
kfed和磁盘头元数据 获取基础信息 - 无持久化基表,实例重启后重置统计
6. 工作原理
-
数据收集:
- ASM 实例跟踪每个 I/O 请求的元数据
- 统计信息在 内存中实时更新
- 通过
ksfd内核模块 与存储交互
-
状态监控:
-
错误处理:
- 读写错误通过 SCSI/SATA 错误码 捕获
- 错误计数达阈值触发 磁盘 OFFLINE(
_asm_autodrop_retries参数控制)
-
RAC 处理:
- 每个实例维护 本地磁盘统计
GV$视图聚合所有实例数据- 实例亲和性 通过
PREFERRED_READ字段标识
7. 常用 SQL 查询示例
(1) 磁盘 I/O 性能概览
SELECT
name AS disk_name,
path,
reads,
writes,
ROUND((read_time*10)/NULLIF(reads,0),2) AS avg_read_ms,
ROUND((write_time*10)/NULLIF(writes,0),2) AS avg_write_ms,
ROUND(bytes_read/1048576,2) AS read_mb,
ROUND(bytes_written/1048576,2) AS write_mb
FROM v$asm_disk_stat
WHERE group_number IS NOT NULL;
(2) 识别高延迟磁盘(>20ms)
SELECT
path,
ROUND((read_time*10)/NULLIF(reads,0),2) AS avg_read_ms,
ROUND((write_time*10)/NULLIF(writes,0),2) AS avg_write_ms
FROM v$asm_disk_stat
WHERE (read_time*10)/NULLIF(reads,0) > 20
OR (write_time*10)/NULLIF(writes,0) > 20;
(3) 检测磁盘错误
SELECT
name,
path,
read_errs,
write_errs,
header_status,
state
FROM v$asm_disk_stat
WHERE read_errs > 0 OR write_errs > 0;
(4) 空间利用率分析
SELECT
dg.name AS dg_name,
ds.name AS disk_name,
ds.total_mb,
ds.free_mb,
ROUND((1 - ds.free_mb / ds.total_mb)*100, 2) AS used_pct
FROM v$asm_disk_stat ds
JOIN v$asm_diskgroup dg ON ds.group_number = dg.group_number
WHERE ds.group_number IS NOT NULL;
(5) 计算吞吐量(需两次快照)
-- 第一次快照
CREATE TABLE diskstat_snap AS
SELECT disk_number, bytes_read, bytes_written, SYSTIMESTAMP AS snap_time
FROM v$asm_disk_stat
WHERE group_number=1;
-- 等待5分钟
EXEC DBMS_LOCK.SLEEP(300);
-- 计算增量
WITH curr AS (
SELECT disk_number, bytes_read, bytes_written
FROM v$asm_disk_stat
WHERE group_number=1
)
SELECT
d.path,
ROUND((c.bytes_read - s.bytes_read)/1048576 / 300 * 60, 2) AS read_mb_min,
ROUND((c.bytes_written - s.bytes_written)/1048576 / 300 * 60, 2) AS write_mb_min
FROM curr c
JOIN diskstat_snap s ON c.disk_number = s.disk_number
JOIN v$asm_disk d ON d.disk_number = c.disk_number;
(6) 重平衡操作监控
SELECT
d.path,
d.bytes_processed,
d.est_minutes,
s.state
FROM v$asm_operation o
JOIN v$asm_disk_stat d ON o.group_number = d.group_number
WHERE o.operation = 'REBAL';
8. 注意事项
-
统计重置:
- ASM 实例重启后统计归零
- 磁盘
OFFLINE/ONLINE重置计数 - RAC 中只重置本地实例统计
-
关键阈值:
- 延迟警告:读/写 > 20ms
- 错误告警:
READ_ERRS/WRITE_ERRS > 0 - 空间告警:
FREE_MB < 10% TOTAL_MB
-
性能影响:
- 频繁查询
V$ASM_DISK_STAT消耗 CPU - 在存储性能问题期间避免高频监控
- 频繁查询
-
最佳实践:
- 结合
AWR报告分析长期趋势 - 使用
GV$视图监控 RAC 全局状态 - 定期检查磁盘错误:
ALTER DISKGROUP CHECK ALL;
- 结合
-
平台差异:
- Linux:
PATH为/dev/asm* - Windows:
PATH为\\.\PHYSICALDRIVE* - 云平台:显示虚拟路径(如 AWS EBS
vol-xxxx)
- Linux:
总结
V$ASM_DISK_STAT 是 ASM 存储管理的 核心诊断视图,提供:
- 实时 I/O 性能指标(延迟、吞吐量)
- 磁盘健康状态(错误计数、头状态)
- 空间利用率分析
- RAC 实例级访问模式
通过该视图,DBA 可:
- 快速定位存储性能瓶颈
- 预防磁盘故障导致的可用性问题
- 优化数据分布与负载均衡
- 验证存储配置有效性
- 监控关键运维操作(如重平衡)
结合 AWR 报告和 ASM 警报日志,可构建全面的 ASM 存储监控体系。
欢迎关注我的公众号《IT小Chen》

1165

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



