GaussDB(DWS)-硬件-慢盘定位实践
一、什么是慢盘
分布式系统在长期运行过程中,由于体质或频繁读写的原因,部分硬盘会出现延时变大、读写变慢的情况。当某个磁盘出现性能故障或IO负载过高等情况导致延迟变大时,用户几乎所有业务都会受到严重影响。“慢盘现象”会导致整个集群性能下降,严重时甚至会导致数据丢失、服务不可用等问题。
慢盘现象与古老的木桶效应如出一辙:木桶效应指的是木桶最多能盛的水,不是由最高的那块木板所决定,而是由最短的那块木板所决定。与此类似,分布式存储的性能不是由最快的磁盘决定,而是由最慢的磁盘所决定。
二、慢盘的现象
对于DWS来说,慢盘最突出的表现为业务执行慢,等待视图存在大量等IO的的等待状态
相关SQL:
SELECT wait_status,wait_event,count(*) as cnt FROM pgxc_thread_wait_status WHERE wait_status not in('wait cmd', 'synchronize quit', 'wait stream task') GROUP BY 1,2 ORDER BY 3 DESC limit 100;
此时查看磁盘IO情况发现,存在%util飚高至100%,但读写数据量不高乃至几乎没有,await与svctm占用较高的情况,可能存在慢盘。
iostat -xm 2
无现场定位手段:
cd /var/log/sa
sar -f sa{日期} -d -p -s {开始时间} -e {结束时间}
相关参数说明:
#每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
rrqm/s
#每秒对该设备的写请求被合并次数
wrqm/s
# 每秒完成的读次数
r/s
# 每秒完成的写次数
w/s
#每秒读数据量(MB为单位)
rMB/s
#每秒写数据量(MB为单位)
wMB/s
#平均每次IO操作的数据量(扇区数为单位)
avgrq-sz
#平均等待处理的IO请求队列长度
avgqu-sz
#平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
await
#平均每次IO请求的处理时间(毫秒为单位)
svctm
#采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
%util
PS:rrqm/s这个指标很高,大概率就是业务里面有全表扫描了
三、工具下载及安装
参考链接:下载和安装StorCLI工具
四、慢盘确认
执行storcli64需要root权限
4.1 检查CC与PR
CC是consistency check,一致性校验。一致性校验是磁盘阵列控制器的一种高级维护功能。它可以预先检查阵列上的数据,以保证它们的一致性,即数据是正确的、没有被破坏。对于有奇偶校验值的阵列(RAID-5),一致性校验通过数据的奇偶校验,并且和存校验值的盘上的校验值进行比较,确定并纠正数据的一致性。对于镜像盘,一致性校验比较RAID-1上2块硬盘的数据是否完全一致。不一致的需要进行同步处理。对于剩余空间的磁盘介质consistency check一样会进行读校验。
PR(Patrol Read/巡读)是RAID卡通过定期的校验指令对硬盘检测以保护数据的手段,具体工作机理是,在RAID卡空闲并且无其他background tasks的时候开始(避免影响raid卡正常工作),并且随时可以被上层或者raid卡中断,raid卡发生PR的时候,会下发verify指令给硬盘,由硬盘执行verify指令,如果遇到bad block,raid卡会根据raid算法进行复。(就是根据raid组的校验算法,单盘RAID0无冗余,无法进行raid层面的修复)。
可通过以下命令确认是否处于以上两种状态
storcli64 show #获取ctl_id
storcli64 /c{ctl_id} show cc #检查CC
storcli64 /c{ctl_id} show pr #检查PR
说明CC与PR已经打开,如果Current State不为Stopped,说明CC或PR正在执行中,影响IO,确认为CC或PR影响导致产生类似慢盘的现象,阻塞业务。
可通过如下命令关闭:
storcli64 /c{ctl_id} set cc = off
storcli64 /c{ctl_id} set pr = off
再次检查,确认Mode都为Disabled确认关闭。
4.2 硬盘级故障标准
检查当前VID
storcli64 /c{ctl_id} show all
根据VID查看各raid组下每个硬盘的DID和raid组所属的盘符
storcli64 /c{ctl_id}/v{VID} show all | grep 'OS Drive Name'
storcli64 /c{ctl_id}/v{VID} show all
查看raid组所需盘符
查看每个物理盘对应的DID
获取smart信息
#SAS盘:
smartctl -a -d megaraid,{DID} /dev/sd* | grep 'Elements in grown defect list'
smartctl -a -d megaraid,{DID} /dev/sd* | grep 'Error counter log' -A 6
#SATA盘:
smartctl -a -d sat+megaraid,{DID} /dev/sd* | grep 'Elements in grown defect list'
smartctl -a -d sat+megaraid,{DID} /dev/sd* | grep 'Error counter log' -A 6
Elements in grown defect list:GLIST-成长缺陷列表,随着用户使用硬盘,硬盘检测到某些区域可能存在缺陷(坏扇区),自动重新映射到出厂时预留的空间,记录到GLIST中,由于G列表带来的是重映射,而非跳过,也就意味着硬盘首先寻找到坏的区域然后再映射到安全区域,这样就会造成硬盘存取速度的减慢。
UnCorrected Error(read+write+verify)项 :UNC(UnCorrected Error),无法修复的错误扇区数,指硬盘内部出现了无法被纠错的扇区数,当UNC过多时,硬盘可能发生局部失效。
一般认为Glist+UNC > 300,该硬盘可识别为慢盘,检查DID对应Slt,即为硬盘槽位,需及时更换对应槽位硬盘。
4.3 RAID卡标准
查看raid卡下每个物理盘对应的EID、SID
storcli64 /c{ctl_id} show all
对应物理盘的error信息
storcli64 /c{ctl_id}/e{EID}/s{SID} show all | grep 'Error Count'
Media Error 介质错误:表示raid卡记录到硬盘侧的error数量
Other Error 其它错误:表示raid卡记录到的其它error数量
这两项参数可以反映硬盘的健康状态
RAID卡信息满足:盘Media Error+盘Other Error>200时,可判断为慢盘,需要换掉SID槽位的硬盘。
五、参考文档
- 点赞
- 收藏
- 关注作者
评论(0)