美文网首页
记录一次MySQL查询千万数据返回失败的故障

记录一次MySQL查询千万数据返回失败的故障

作者: frankie_cheung | 来源:发表于2021-02-23 15:21 被阅读0次

背景:
业务反应查询某个表 突然连接就中断报错:
报错信息为 :can not read response from server

经查询是这个表返回4000万条数据,所以就去调整MySQL参数:
max_allowed_packet
net_buffer_length
net_read_timeout
三个参数都调的很高了,但是业务依然在查询不到300秒的时候就报错

如下为MySQL查询的原理 来自于极客时间<MySQL45讲>
MySQL是边读边发,不是一次性把数据加载到内存一次发。

实际上,服务端并不需要保存一个完整的结果集。取数据和发数据的流程是这样的:获取一行,写到 net_buffer 中。这块内存的大小是由参数 net_buffer_length 定义的,默认是 16k。重复获取行,直到 net_buffer 写满,调用网络接口发出去。如果发送成功,就清空 net_buffer,然后继续取下一行,并写入 net_buffer。如果发送函数返回 EAGAIN 或 WSAEWOULDBLOCK,就表示本地网络栈(socket send buffer)写满了,进入等待。直到网络栈重新可写,再继续发送。

在业务查询时 数据库 show processlist 状态为:Sending to client
由于业务使用的是JDBC ,我先使用python的pymysql写了一个脚本去读取这4000万数据是可以正常读取的。

相关文章

网友评论

      本文标题:记录一次MySQL查询千万数据返回失败的故障

      本文链接:https://www.haomeiwen.com/subject/ifvnnktx.html