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

在这里插入图片描述
以下是对 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_NUMBERNUMBER磁盘组编号(未分配时为 NULL
DISK_NUMBERNUMBER磁盘在组内的编号
INST_IDNUMBER实例 ID(RAC 环境)
NAMEVARCHAR2(30)磁盘名称(ASM 别名)
PATHVARCHAR2(4000)物理路径(/dev/sdb1\\.\PHYSICALDRIVE1
READSNUMBER读取操作总次数
WRITESNUMBER写入操作总次数
READ_TIMENUMBER总读取时间(厘秒)
WRITE_TIMENUMBER总写入时间(厘秒)
BYTES_READNUMBER读取总字节数
BYTES_WRITTENNUMBER写入总字节数
CREATE_DATEDATE磁盘创建时间
MOUNT_DATEDATE最后挂载时间
HEADER_STATUSVARCHAR2(11)头状态MEMBERCANDIDATEPROVISIONEDFORMER
MODE_STATUSVARCHAR2(7)模式状态ONLINEOFFLINE
STATEVARCHAR2(7)磁盘状态NORMALDROPPINGDROPPED
OS_MBNUMBER操作系统报告的总大小(MB)
TOTAL_MBNUMBERASM 可用总空间(MB)
FREE_MBNUMBER剩余可用空间(MB)
HOT_READSNUMBER热点区域读取次数
HOT_WRITESNUMBER热点区域写入次数
COLD_READSNUMBER非热点区域读取次数
COLD_WRITESNUMBER非热点区域写入次数
READ_ERRSNUMBER读取错误计数
WRITE_ERRSNUMBER写入错误计数
FAILGROUPVARCHAR2(30)故障组名称
LABELVARCHAR2(255)用户定义标签
VOTING_FILEVARCHAR2(3)是否包含表决文件YES/NO
SECTOR_SIZENUMBER逻辑扇区大小(字节)
BLOCK_SIZENUMBER物理块大小(字节)
ALLOCATION_UNIT_SIZENUMBER分配单元大小(字节)
MOUNT_STATUSVARCHAR2(7)挂载状态CACHED/UNCACHED
REDUNDANCYVARCHAR2(9)冗余级别EXTERNNORMALHIGH

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. 工作原理

  1. 数据收集

    • ASM 实例跟踪每个 I/O 请求的元数据
    • 统计信息在 内存中实时更新
    • 通过 ksfd 内核模块 与存储交互
  2. 状态监控

    I/O请求
    ASM I/O层
    统计更新
    V$ASM_DISK_STAT
    磁盘头元数据
  3. 错误处理

    • 读写错误通过 SCSI/SATA 错误码 捕获
    • 错误计数达阈值触发 磁盘 OFFLINE_asm_autodrop_retries 参数控制)
  4. 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. 注意事项

  1. 统计重置

    • ASM 实例重启后统计归零
    • 磁盘 OFFLINE/ONLINE 重置计数
    • RAC 中只重置本地实例统计
  2. 关键阈值

    • 延迟警告:读/写 > 20ms
    • 错误告警READ_ERRS/WRITE_ERRS > 0
    • 空间告警FREE_MB < 10% TOTAL_MB
  3. 性能影响

    • 频繁查询 V$ASM_DISK_STAT 消耗 CPU
    • 在存储性能问题期间避免高频监控
  4. 最佳实践

    • 结合 AWR 报告分析长期趋势
    • 使用 GV$ 视图监控 RAC 全局状态
    • 定期检查磁盘错误:
      ALTER DISKGROUP CHECK ALL;
      
  5. 平台差异

    • Linux:PATH/dev/asm*
    • Windows:PATH\\.\PHYSICALDRIVE*
    • 云平台:显示虚拟路径(如 AWS EBS vol-xxxx

总结

V$ASM_DISK_STAT 是 ASM 存储管理的 核心诊断视图,提供:

  • 实时 I/O 性能指标(延迟、吞吐量)
  • 磁盘健康状态(错误计数、头状态)
  • 空间利用率分析
  • RAC 实例级访问模式

通过该视图,DBA 可:

  1. 快速定位存储性能瓶颈
  2. 预防磁盘故障导致的可用性问题
  3. 优化数据分布与负载均衡
  4. 验证存储配置有效性
  5. 监控关键运维操作(如重平衡)

结合 AWR 报告和 ASM 警报日志,可构建全面的 ASM 存储监控体系。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值