硬件工程师跟DBA干起来了,停止无端揣测…
作者:IT邦德
中国DBA联盟(ACDU)成员,10余年DBA工作经验,
Oracle、PostgreSQL ACE
CSDN博客专家及B站知名UP主,全网粉丝10万+
擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复,
安装迁移,性能优化、故障应急处理微信:jem_db
QQ交流群:587159446
公众号:IT邦德
前言
生产数据库每次出现性能问题的时候,不管是应用开发、还是硬件以及DBA,都要综合考虑,寻找问题根因,而不是无端猜测,本文这个案例很有意思
1.DBA的无奈
某制造大企业,有套Linux7.9环境下的Oracle19C RAC,系统上线10年以上,ASM空间10T已经不足,急需扩容。DBA在对数据库在扩容到18T的磁盘后,数据库性能下降严重,导致应用处理速度大大下降。
2.硬件工程师甩锅
硬件工程师也是刚采购的新的存储盘,这时候出现这种情况,影响的生产应用系统,加上目前是工厂产能高峰期,应用卡顿,产线员工抱怨不断,电话都打爆了,领导早会召集相关负责人开会,要求彻底排除此事,加上DBA小王最近刚跟女朋友分手,心情不好,面对.硬件工程师甩锅及无端猜测,开会现场直接干了起来
3.问题排查
3.1 扩容前后磁盘相应时间
AWR报告是最直接的分析工具,冷静下来后,综合分析后发现,扩容之前磁盘平均响应时间几百微秒。
扩容之后,磁盘平均响应时间达到了十几毫秒以上。
3.2 网络排查
AWR中新引入的后台进程ping会定期测量网络统计信息。
它会定期唤醒(大约每5分钟唤醒一次),
并测量消息传送和块传送的延迟。
在每次唤醒时,它向所有集群节点发送两条消息(分别为500字节和8192字节),
计算往返延迟
netstat -s看网路reassembles failed没有较大变化,
排查发现DB服务器和心跳交换机的 mtu 值一致
延迟正常, 平均ms级,网络一切正常
4.扩容复盘
处理过程如下:
给DATA磁盘组添加2T磁盘3块:
alter diskgroup DATA add disk '/dev/sdf' name diskf,
'/dev/sdg' name diskg,'/dev/sdh' name diskh;给我归档ARC磁盘组添加2T磁盘1块:
alter diskgroup ARC add disk '/dev/sdi' name diski;
手动重新平衡磁盘组
可以查询 v$asm_operation 视图查看重新平衡操作的状态。
SQL> select * from v$asm_operation;
SQL> alter diskgroup data rebalance power 8;
这种磁盘响应时间的上升导致用户体验感大大下降。和硬件工程师沟通后得知,新扩容的这8T磁盘为机械型磁盘,而原来的磁盘为固态磁盘。从此可以导致磁盘IO响应速度的下降就是磁盘类型不配导致的。知道了问题的原因,调整起来就简单了,硬件工程师重新划固定类型的磁盘给数据库服务器,机械型磁盘回收。重新调整后,IO又恢复至之前的微秒级别了,业务响应速度正常
5.技能扩展
5.1 给磁盘组加磁盘
grid用户登陆节点1操作系统,
检查已存在及待加入ASM磁盘HEADER_STATUS是否为CANDIDATE,
并检查现有磁盘组当前状态。
select r.NAME,inst_id,group_number,header_status,path from gv$asm_disk r order by 1;
select name,state from v$asm_diskgroup
alter diskgroup DATA add disk '/dev/mapper/MES_DATA1'
alter diskgroup DATA rebalance power 8;
select * from V$asm_operation;
5.2 磁盘踢出去
--磁盘组名称
select name,state from v$asm_diskgroup
--磁盘信息
select r.NAME,inst_id,group_number,header_status,path from gv$asm_disk r order by 1;
alter diskgroup IDX drop disk IDX_0001 rebalance power 4;
--查看磁盘均衡是否操作结束
select * from V$asm_operation;
5.3 删除ASM磁盘组
1.检查确认要删除的磁盘组是否在用
select * from dba_data_files;
select * from dba_temp_files;
select * from v$logfile;
2.先在各节点上dismount磁盘组(2个节点都要操作)
alter diskgroup REDO01 dismount;
alter diskgroup REDO02 dismount;
alter diskgroup REDODG1 dismount;
SQL> alter diskgroup DATA dismount;
SQL> alter diskgroup ARCH mount;
3.ASM中删除磁盘组(grid用户以sysasm角色)
drop diskgroup REDO01 force including contents;
drop diskgroup REDO02 force including contents;
drop diskgroup REDODG1 force including contents;
6.总结
DBA的每次实施作业,需要的是硬件、应用开发的全力配合,只有做到沟通顺畅,做好风险点防范,才是一次完美的作业