案例:ASM磁盘组数据分布不均衡

本案例来自西区某银行,使用的是19c的gi,11g的db,据现场同事反馈ASM磁盘组datac1 在还有空间的情况下,数据文件无法自动扩展,报错ORA-15041。

该磁盘组基本情况如下:

  • 磁盘组总容量250T,由144块1.7T 的磁盘组成
  • 3个failgroup、high冗余

ORA-15041还是比较常见的错误,MOS上有一篇文档ORA-15041 Diskgroup Space Exhausted (Doc ID 1367078.1) 对该错误有比较详细的描述以及诊断思路。

经过分析发现,该磁盘组每个failgroup磁盘状态均正常,并且磁盘个数与磁盘大小均相同,元数据也无异常,但是ASM磁盘组数据分布非常不均衡,大部分磁盘都还剩200G左右空间,但是其中有几块盘,free_mb几乎为0,最大的磁盘free_mb有360G,在这种情况下即便是添加磁盘或者rebalance都是无济于事的,因为rebalance的前提条件是每块盘必须有至少300M的空间。此时只有一个办法就是remove/resize磁盘组的文件释放出一些空间。

当释放的空间满足rebalance之后,手动去执行rebalance发现没有任何作用。设置”_asm_imbalance_tolerance”为0,再次rebalance仍然是涛声依旧。该问题其实风险很大了,因为磁盘组几乎用满,业务增长量也很快,随时有磁盘组容量不足的隐患。

所以还得继续分析,通过sql去查询每个磁盘的最大extent差距和最大au差距

发现free最大的磁盘和最小的磁盘之间有接近6000多个extent差距和56000多个AU差距,并且extent和au差距有接近10倍是因为数据库中大量使用了bigfile,配合11.1引入的asm磁盘组属性variable extent,导致磁盘之间的free_mb差距进一步增大,假如没有bigfile的话,那么该案例即使磁盘组分布不均衡,最多也只是差6000多个AU而已。这也给尽量不使用bigfile再添加上了一个理由。

对于asm rebalance原理,之前有做过深入的分析,结合一下之前分析的结论

http://www.minniebaby.tech/2021/11/01/%E6%A1%88%E4%BE%8B%EF%BC%9A%E6%B7%B1%E5%85%A5%E8%A7%A3%E6%9E%90asm-rebalance%E6%97%A0%E6%B3%95%E5%90%AF

可以想到的解决办法是:

  • disable variable extent,但是只会对新增文件生效并没有什么用,而且该特性在有bigfile的情况下是非常有用的特性,所以否决掉该方案。
  • 剔除一些磁盘新建一个磁盘组,全部使用small file,考虑到该库非常大,并且db是11g的没有online move datafile/table的功能,非常麻烦,该方案也否决掉了。
  • 由于variable extent的存在,考虑修改“_asm_rebalance_plan_size”为1,再次发起rebalance尝试,该方案待定,因为会导致rebalance很慢。
  • 由于该磁盘组非常大,磁盘比较多,手动发起rebalance,怀疑在rebalance PST repartner阶段仅仅是进行微调,所以考虑使用之前分析问题用过的一个内部event 15195事件设置level 57,15195是一个非常有用debug的event,通常是oracle研发使用的,所以官方并未公开该event的详细用法,我也仅仅只知道level 604和level 57,本次使用的level 57的含义是完全重建磁盘之间的partner关系。

最终裁定的方案就是recreate pst partner,再次发起rebalance,观察磁盘间的最大extent和au差距正在减少,说明这次是有效果的。

回顾整个故障,得到了一些启发:

  • 尽量不使用bigfile
  • 对于asm磁盘组剩余空间的监控,必须加上每块磁盘的free_mb监控和磁盘组使用是否均衡的监控,如果及早发现,也不会跟这次一样在比较大的压力下去分析和处理问题
  • 不要创建如此大的磁盘组,一个磁盘组内不要使用如此多的磁盘,避免ASM在涉及元数据的一些内部操作时出现紊乱,比如此次的rebalance
此条目发表在Oracle, Oracle troubleshooting分类目录,贴了标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注