Oracle 19c如何诊断ASM磁盘组的IO性能瓶颈_分析AWR中的ASM统计

风瑶同学_6559

风瑶同学_6559

2026-06-06

235人浏览

原创

v$asm_disk_iostat是asm磁盘i/o性能诊断首选视图,提供单盘级读写延迟(厘秒)、错误计数、软读率等细粒度实时统计,可精准定位慢盘、故障盘及缓存问题;v$asm_disk_stat适用于普通存储,而v$asm_disk_iostat_sparse专用于云/虚拟化稀疏盘,额外暴露存储等待时间以区分asm处理与后端瓶颈。

直接看 v$asm_disk_iostat 和 v$asm_disk_stat,别只盯着awr里的“tablespace io stats”——它压根不反映asm磁盘组的真实i/o分布。

为什么AWR的Tablespace IO Stats对ASM诊断基本无效

AWR报告中“Tablespace IO Stats”按表空间聚合,而ASM磁盘组是底层存储抽象层,一个表空间的数据文件可能跨多个磁盘、甚至多个磁盘组。它的Av Rd(ms)是加权平均值,会掩盖单个慢盘(比如某块SSD故障后延迟飙到2000ms,但被其他3块正常盘拉低到50ms)。更关键的是:该部分统计不区分ASM内部读(如AU元数据访问)、缓存软读(PERCENT_SOFT_READS)、稀疏盘预分配开销等真实ASM行为。

  • 真正要定位ASM瓶颈,必须下钻到磁盘/卷/IO路径粒度,而非数据库逻辑对象层级
  • AWR中Physical Read Total IO Requests Per Sec这类全局指标只能告诉你“有压力”,无法回答“哪块盘在拖后腿”
  • 如果ASM IO for non-blocking poll等待高,说明问题在ASM与存储交互环节,AWR里根本没这个维度

V$ASM_DISK_IOSTAT:查单盘I/O延迟和错误的首选视图

这是ASM实例内存中实时维护的细粒度I/O统计,字段单位统一为厘秒(0.01秒),可直接算出毫秒级延迟:

  • AVG_READ_TIME = READ_TIME / READS * 10(毫秒),持续>20ms(OLTP)或>50ms(DSS)即需干预
  • READ_ERRS 或 WRITE_ERRS >0,立刻检查HEADER_STATUS是否为PROVISIONED或FAILED
  • PERCENT_SOFT_READS <80%,说明ASM缓存命中差,可能因_asm_cache_size过小或热点数据未驻留
  • 查询示例:
    SELECT group_number, disk_number, 
           ROUND((read_time/reads)*10,2) avg_read_ms,
           ROUND((write_time/writes)*10,2) avg_write_ms,
           read_errs, write_errs, percent_soft_reads
    FROM v$asm_disk_iostat 
    WHERE reads > 0 AND writes > 0 
    ORDER BY avg_read_ms DESC;

V$ASM_DISK_STAT vs V$ASM_DISK_IOSTAT_SPARSE:选哪个取决于你的存储类型

普通本地盘、SAN LUN用V$ASM_DISK_STAT;云环境(AWS EBS gp3/io2)、VMware VMDK等精简配置存储,必须查V$ASM_DISK_IOSTAT_SPARSE——它额外暴露READ_TIME_WAIT(纯等待存储响应的时间),能区分是ASM处理慢还是后端存储卡住。

QuantOracle
QuantOracle

63个确定性量化金融计算器 + 10个通过MCP的复合工作流。期权定价、Greeks、奇异衍生品、风险指标、投资组合优化……

下载
  • V$ASM_DISK_STAT的READ_TIME包含ASM内部调度+存储响应,无法拆分
  • V$ASM_DISK_IOSTAT_SPARSE中若READ_TIME_WAIT / READ_TIME >70%,基本可断定是云存储IOPS配额耗尽或阵列队列深度超限
  • RAC环境务必用GV$前缀视图,并按INST_ID分组,避免误判某节点独占I/O

结合gv$asm_operation确认重平衡是否真在“干活”

当EST_MINUTES长期不降,先别急着调asm_power_limit。查gv$asm_operation看SOFR和EST_WORK是否变化:

  • STATE = 'EXECUTING' 但 SOFR = 0 → 磁盘状态异常(查v$asm_disk中STATE是否为OFFLINE)
  • POWER列数值远低于你设的asm_power_limit → 本次操作显式指定了POWER N,参数未覆盖
  • EST_RATE = 0 → I/O被阻塞,此时应立刻查v$session_wait中是否有enq: A-<em>contention</em>或ASM IO for non-blocking poll堆积

复杂点在于:这些视图的数据全在ASM实例内存中,重启即清零;且V$ASM_DISK_IOSTAT_SPARSE在非稀疏盘上返回空行——容易误以为“没数据”而非“不适用”。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

oracle

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
oracle清空表数据
oracle清空表数据

当表中的数据不需要时,则应该删除该数据并释放所占用的空间。本专题为大家提供oracle清空表数据的相关文章,帮助大家解决该问题。

2023.08.16

961

5

Oracle中declare的使用
Oracle中declare的使用

Oracle DECLARE语句是PL/SQL编程语言中用于声明变量、常量、游标或异常的关键字。它的主要作用是在程序中定义这些对象,以便在后续的代码中使用。DECLARE语句的语法简单明了,可以根据需要声明多个对象。通过使用这些声明的对象,可以进行各种操作,如计算、查询数据库、处理异常等 。

2023.09.15

2753

5

oracle怎么分页
oracle怎么分页

实现分页的步骤:1、使用ROWNUM进行分页查询;2、在执行查询之前进行设置分页参数;3、使用"COUNT(*)"函数来获取总行数,并使用"CEIL"函数来向上取整计算总页数;4、在外部查询中使用"WHERE"子句来筛选出特定的行号范围,以实现分页查询。想了解更多oracle怎么分页的文章,可以来阅读本专题先的文章。

2023.09.18

2770

5

Oracle查看表操作历史记录
Oracle查看表操作历史记录

查看操作历史记录的方法:1、使用Oracle内置的审计功能,可以记录数据库中发生的各种操作,包括登录、DDL语句、DML语句等;2、使用Oracle日志文件,其中包含了数据库中发生的各种操作,可以通过查看日志文件来获取操作历史记录;3、使用Oracle的Flashback功能,可以查看数据库在某个时间点的操作历史记录;4、使用第三方工具等。本专题还提供其他查看表操作的文章,大家可以免费阅读。

2023.09.19

1569

3

Oracle中RAC的用法
Oracle中RAC的用法

Oracle中RAC的用法:1、通过在多个服务器上运行数据库实例来提供高可用性;2、允许在需要时增加或减少节点数量;3、通过将工作负载分布到多个节点上来实现负载均衡;4、使用共享存储来实现多个节点之间的数据共享;5、允许多个节点同时处理数据库请求,从而实现并行处理;6、提供了透明故障切换功能;7、使用了一些技术来确保数据的一致性;8、提供了管理工具来简化RAC环境的管理和维护。本专题还提供RAC相关的其他文章,大家可以免费阅读。

2023.09.19

2193

7

oracle imp
oracle imp

imp是Oracle数据库中的一个命令行工具,用于将导出的数据和对象从一个数据库实例导入到另一个数据库实例。imp命令的一般语法为“imp username/password@connect_string file=file_name [options]”。

2023.09.19

2929

4

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4449

19

oracle通配符有哪些
oracle通配符有哪些

oracle通配符有“%”、“_”、“[]”和“[^]"。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.08

237

5

oracle四舍五入怎么操作
oracle四舍五入怎么操作

oracle四舍五入操作可以使用ROUND函数来实现,其语法为“ROUND(number, decimal_places)”,其中,number是要进行四舍五入的数值,decimal_places是指定的小数位数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.14

766

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程