偶小梦
发布于

运行之前可以执行成功的 sql 查询语句报错,报错信息“connection xxx get none response from xxx in 3600 seconds. It may ...”。

➢ 解答
这是因为节点间有 UDP 丢包。
UDP Packet Lost - receive buffer errors。
确认是否是 packet reassembles failed 导致 UDP 丢包

#执行命令
$ cat /proc/net/snmp | grep "Ip"
Ip: Forwarding DefaultTTL InReceives InHdrErrors InAddrErrors ForwDatagrams InUnknownProtos InDiscards InDelivers OutRequests OutDiscards OutNoRoutes ReasmTimeout ReasmReqds ReasmOKs ReasmFails FragOKs FragFails FragCreates
Ip: 1 64 148635009 0 0 0 0 0 148628477 148758559 0 0 0 0 0 0 0 0 0

#确认 ReasmTimeout 与 ReasmFails 值

  • ReasmTimeout: 分片在 reassemble buffer 中超时后被丢弃的计数
  • ReasmFails: 报文重组失败计数。该值包含 timeout 的计数

确认方法

  1. 当系统中有大量的 ReasmTimeout 计数的增长时,一般需要确认的是底层链路是否存在一定的丢包率
  2. packet reassembles failed 计数一直在增长
  3. 通过 ReasmTimeout 的计数排除掉是 timeout 造成的 failed 增长,或者 timeout 的计数只是 failed 中的一部分
  4. 通过 ReasmFails 增长的规律进行判断,因为 buffer 满后丢包的过程是会有大量丢包的,所以这个时候 packet reassembles failed 是一次性巨量的增长,而非 1、2 的增加。
    可以将 gp_max_packet_size 设置为小于 MTU (1500)的值,比如 1024,然后重启集群。
评论
    test