今天线上有几条sql执行1800s后失败了,报如下错误。
我碰到这种问题第一反应反手甩锅运维,让运维改参数,比如修改以下参数
max_allowed_packet:mysql服务器端和客户端在一次传送数据包的过程当中最大允许的数据包大小,该参数最大1G,可通过set global修改。
net_read_timeout:读取超时时间默认30分钟。可通过set global修改。
net_write_timeout:写入超时时间,默认60分钟。可通过set global修改。
但改参数治标不治本,比如我遇到的情况,表a中有3000多万数据(一个老项目,mysql5.6版本),使用表a中不同字段重复关联xx表,进行查询处理。这种sql改参数已经没用了,跑半年可能都跑不出来。对于这个sql我的处理方法也比较简单,总的来说就是采用分治思想,将表a拆分、关联字段拆分,对于拆分后得到的结果进行聚合。