摘要:本文将介绍几种经常使用手段,用于梳理数据库网络故障可能存在的问题,从而快速定位恢复。
在GaussDB各种问题场景中,网络故障是最难定位及恢复的问题之一,其不只可能影响着数据库的性能,甚至在必定程度上会阻塞业务的正常运行,形成严重后果。网络问题牵连着应用侧(即GaussDB)、操做系统、交换机以及硬件资源等,本文将介绍几种经常使用手段,用于梳理其间可能存在的问题,从而快速定位恢复。文中涉及的参数、视图详情可参考产品文档。ios
图1. gsar脚本运行结果sql
对于性能慢、数据库链接异常等状况,建议使用gsar脚本检查网络状态,若重传率或丢包率超过0.01%,如图1最后一列红色框,则说明网络存在问题,需进一步分析定位。数据库
对于TaiShan服务器(100/200),均须要使用兼容的网卡及驱动,不然颇有可能产生此类网络问题。缓存
须严格按照加固配置指南进行定位,包括透明大页等均需核查。服务器
MTU即最大传输单元,整条数据链路要保证MTU的一致性,不然可能因为数据包大小不匹配致使丢包。使用ifconfig命令便可查看和修改各个网卡的MTU值:网络
图2. ifconfig修改MTUtcp
如图2,其缺点是重启后失效,想长久保留还需修改配置文件,不一样操做系统修改方法不一样,可谷歌查找。工具
使用gsar脚本观察到明显的重传现象后,可根据netstat命令具体查看重传状态:性能
图3. netstat查看重传状态测试
若重传次数达到12次(图3红色框中,第一列表示距离下一次重传的时间,第二列为已经发生重传的次数,理论上重传达到9分钟,keepalive就会检测到链接异常,将其断开),则说明此时网络不通,可进一步排查对端进程状态以及网络环境(ping)。
当发送缓存区严重阻塞时,可明显看到重传现象,仍然使用netstat命令查看缓存区状况:
图4. netstat查看发送缓存区状态
图4红色框为发送端缓存区状态,能够看到阻塞较为严重且接收端均为192.168.2.101,此时能够根据端口号查看对端接收状况:
图5. netstat查看对端接收缓存区状态
图5红色框为44112端口的接收端缓存区,阻塞现象一样明显。此时,能够根据GaussDB相关视图获取各线程状态,进而分析阻塞缘由,以一条阻塞的链接为例:
图6. DN上根据client_port查到query_id
根据GaussDB节点端口登陆数据库,利用对端链接端口号查找到query_id;
图7. CN上根据query_id查到各线程状态
登陆GaussDB的CN节点,根据query_id找到CN线程id,此时DN均在向CN传输数据,可使用gstack打印此时CN的堆栈等。
1) 打印线程堆栈:gstack lwtid
2) 监控线程与内核交互:strace -p lwtid -tt -T -o strace.log
3) 查看线程使用的CPU资源:top -p pid -d 0.2
个别语句执行慢,打印执行计划发现主要耗时在gather上,此时可根据要执行的sql语句找到对应CN和DN的状态,找到慢因所在节点及线程id,再打印堆栈信息等进一步分析。
图8. 根据sql查到CN线程状态
内存不足是引起丢包的一大缘由,可是通常会出现其余的直观表现,可以使用free、top等命令查看内存状况,也可以使用pv_total_memory_detail视图观察具体的进程情况。
网卡接收到数据后,数据进入到TCP缓存区的过程须要进行CPU中断处理,若此时相关CPU繁忙、软中断使用较高,CPU处理网卡的数据不及时,形成丢包。
图9. speed_test压测接收端
图10. speed_test压测发送端
图11. speed_test压测时网络情况
图12. speed_test压测时CPU软中断情况
使用speed_test工具压测观察,两台机器分别做为接收和发送端,如图9~12,此时测试集群无背景压力,能够看到网络流量达到网卡上限,偶发出现丢包现象,查看对应的CPU软中断,一直处在高于70的水平。
此外,软中断也与IO相关,可以使用iostat命令查看对应时刻的IO状态。对一些场景,网卡与业务分开绑核能够有必定的缓解,使用get_irq_affinity2.sh脚本查看当前网卡绑核状况:
图13. 查看网卡绑核状况
使用smart_irq_affi.sh对网卡进行绑核:
图14. 对网卡进行绑核
使用gs_cgroup对GaussDB进行绑核:
图15. 对GaussDB进行绑核
做为整个数据传输链路的重要一环,针对交换机的拓扑结构、流控、接口带宽等,需联系相关专家进行逐一排查。
1. 网络压测工具:speed_test/iperf
./speed_test_xxx recv/send ip port
iperf -s / iperf -c ip -t time -p thread_num
2. 网卡工具:ethtool
ethtool ethx // speed ethtool -i ethx // driver ethtool -k ethx // gro gso tso ethtool -l ethx // channel ethtool -S ethx // 统计信息
3. 抓包工具:tcpdump
tcpdump tcp -i ethx and host ip1 and ip2 and port port1 -w target.pcap
因为数据传输链路的复杂性,重传丢包问题定位较为困难,但学会掌握必定的手段方法,理清思路,从源头开始排查,终究会找到根因。
附件下载:
GaussDB A 加固配置指南 04.pdf 2.11MB
脚本工具.rar 3.55KB
本文分享自华为云社区《GaussDB网络重传/丢包问题定位总结》,原文做者:Caesar.D。