某个明媚的下午,一个客户在微信上发起了问题对接请求:
lsdg查看DATA磁盘组空间还剩30多G,为何会报控制文件无法扩展?磁盘组空间为何报错磁盘空间不足?
面对如此诡异的问题,我缓缓打出4个大字:
我得到了以下的报错信息:
的确,在报错信息中清清楚楚的写着,控制文件扩展失败,DATA磁盘组空间不足,随后我们看到了当时的磁盘空间信息:
我们可以很明显的看到,DATA盘的确还留有约32GB的空间,那为何会出现这种状况呢?
这种是典型的ASM磁盘空间假耗尽问题。在DATA磁盘组里有一块或者几块的磁盘空间耗尽了,导致磁盘组里的文件无法扩展。
ASM默认会自动对每个磁盘组中的磁盘进行REBALANCE操作 ,目的是使数据平均分布,而当REBALANCE这个动作出现问题时,就会造成数据分布不均,有些磁盘空间已经耗尽,有些磁盘还留存着大量的空间。
这个时候需要检查ASM_POWER_LIMIT 参数:
命令:show parameter asm_power_limit;
并且我们使用 select * from v$asm_operation;命令后,发现后台并没有在做REBALANCE的操作,导致该ASM磁盘组空间假耗尽。
为此,我们做了以下步骤去解决这个问题:
1.调整 ASM_POWER_LIMIT参数值:
alter diskgroup 磁盘组名 rebalance power 2;
注意:该参数默认为1,值越大REBALANCE速度越快,对IO影响越明显,需谨慎,我们这里将其设置为2。
2.查看REBALANCE操作进度:
select * from v$asm_operation;
发现后台REBALANCE操作已在运行
3.在ASMCMD中查看DATA磁盘组中的磁盘空间变化
命令:lsdsk -k -G 磁盘组名
我们可以观察到DATA磁盘组中的磁盘空间在慢慢平衡中。最终,当REBALANCE结束,正常的磁盘组空间分配应该是这样的:
4.在REBALANCE结束后,将 ASM_POWER_LIMIT参数改回默认值:
alter diskgroup 磁盘组名 rebalance power 1;
该步骤是为了防止REBALANCE速率过快,影响IO,从而导致性能问题。
5.检查数据库及业务情况是否恢复正常。
至此,该问题顺利解决。
下面开始知识点总结:
1. ASM默认会自动对每个磁盘组中的磁盘进行rebalance操作 ,目的是使数据平均分布。
2. ASM_POWER_LIMIT 是控制REBALANCE速率的参数,该参数值越高,REBALANCE操作完成的速度就越快,设置语句示例为:ALTER DISKGROUP data2 REBALANCE POWER 2;
3. 使用较低ASM_POWER_LIMIT设置会使REBALANCE需要较长的时间,但会消耗较少的处理和I/O资源,这些资源由其他应用程序(如数据库)共享。有关REBALANCE进程的详细信息,可以查看Oracle ASM警报日志。
参考文献:
https://docs.oracle.com/database/121/OSTMG/GUID-020ABD10-8370-444C-9B44-71F2FF688861.htm#OSTMG10080
https://docs.oracle.com/database/121/OSTMG/GUID-14E48E96-F5D6-4F41-A8E4-B535CBD3CAE5.htm#OSTMG10221
美创运维中心数据库服务团队拥有Oracle ACE 1人、OCM 10余人、数十名Oracle OCP、MySQL OCP、红帽RHCA、中间件weblogic、tuxedo认证、达梦工程师 ,著有《Oracle DBA实战攻略》,《Oracle数据库性能优化方法和最佳实践》,《Oracle内核技术揭秘》等多本数据运维优化书籍。目前运维各类数据库合计2000余套,精通Oracle、MySQL、SQLServer、DB2、PostgreSQL、达梦等主流商业和开源数据库。并成为首批国内达梦战略合作伙伴之一,拥有海量经验和完善的人员培养体系。并同时提供超融合,私有云整体解决方案。
来源:freebuf.com 2020-06-09 11:37:56 by: database
请登录后发表评论
注册