GBase 8a是MPP架构,一些SQL要在多个节点间互相传输大量数据,如果网卡配置rxt和tx参数不适合,会导致丢包dropped,从而出现相同的SQL性能忽然下降的现象。本文给出此问题的具体现象,原因和解决方法。
目录导航
现象
相同的业务SQL,偶发性能断崖式下降,比如平时10秒,偶发能到100秒,200秒以上,有明显的抖动。而且发生问题时,这一批SQL都有影响。大部分情况下,问题会自动环境并恢复。
排查
找到性能影响的节点
根据木桶效应,大部分情况都是1个节点(也有多个的)性能下降,导致整体性能下降。通过查看慢SQL出现在哪个或者哪些节点,定位要排查的目标。
排查可以用如下SQL
select NODE_NAME, ID, user, host, command, start_time, time, state, substring(info,0,100) info from information_schema.GNODES_TASK_INFORMATION where command='query' and info is not null and info not like '%information_schema.processlist%' order by time desc limit 10;
查看节点网卡信息
通过如下命令,查看服务的eth0网卡信息。网卡不同,参数替换下
ifconfig -a eth0
主要查看tx和tx数据包内容,正常的如下
[gbase@vm161 ~]$ ifconfig -a enp0s3
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.2.161 netmask 255.255.255.0 broadcast 10.0.2.255
inet6 fe80::a00:27ff:fe70:4bfc prefixlen 64 scopeid 0x20<link>
ether 08:00:27:70:4b:fc txqueuelen 1000 (Ethernet)
RX packets 229083 bytes 328000550 (312.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 35066 bytes 2680368 (2.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
有故障的网卡信息如下,其中dropped的数量,一直在缓慢的不定期增长。

RX errors
接收总错误数。包含 dropped overruns frame 等细分错误类型的计数
dropped:接收数据包丢弃数
网卡成功接收到数据包,但因系统层面资源不足,无法将数据包传递给上层协议栈(如 TCP/IP)而丢弃的数量。
overruns:接收缓冲区溢出数
网卡硬件接收缓冲区(Ring Buffer)溢出导致的数据包丢弃数,属于硬件层面的溢出错误,和 dropped 的 “系统缓冲区溢出” 是不同层面的问题。
查看网卡Rx,Tx信息
通过如下命令,查看TX和RX信息
[root@vm161 ~]# ethtool -g enp0s3
Ring parameters for enp0s3:
Pre-set maximums:
RX: 4096
RX Mini: n/a
RX Jumbo: n/a
TX: 4096
TX push buff len: n/a
Current hardware settings:
RX: 256
RX Mini: n/a
RX Jumbo: n/a
TX: 256
RX Buf Len: n/a
CQE Size: n/a
TX Push: n/a
RX Push: n/a
TX push buff len: n/a
TCP data split: n/a
其中RX配置的是256,太小。
解决方案
修改网卡的Rx和tx大小。其中参数rx和tx分别修改。
[root@vm161 ~]# ethtool -G enp0s3 rx 4096 tx 4096
[root@vm161 ~]# ethtool -g enp0s3
Ring parameters for enp0s3:
Pre-set maximums:
RX: 4096
RX Mini: n/a
RX Jumbo: n/a
TX: 4096
TX push buff len: n/a
Current hardware settings:
RX: 4096
RX Mini: n/a
RX Jumbo: n/a
TX: 4096
RX Buf Len: n/a
CQE Size: n/a
TX Push: n/a
RX Push: n/a
TX push buff len: n/a
TCP data split: n/a
[root@vm161 ~]#
修改后,再次观察网卡dropped,发现没有再增加。后续观察几天,一直正常,性能也恢复到稳定状态。
总结
网卡RX和TX参数配置不当,导致在大数据量传输下出现丢包,造成性能下降。通过调整参数,解决了这个问题。