SELECT @@max_allowed_packet
我们使用的是 阿里云的 RDS, 它提供了很棒的数据库优化服务,可以定期观察,清理一些慢查询。
在 慢SQL明细 里面, 发现最近一周有不少的 SQL :
1 | SELECT @@max_allowed_packet |
我们使用的是 Golang 去连接 MySQL, 通过全局搜索 max_allowed_packet, 发现在 github.com/go-sql-driver/mysql 中存在如下逻辑:
1 | if mc.cfg.MaxAllowedPacket > 0 { |
1 | // Gets the value of the given MySQL System Variable |
根据上面代码发现如果没有配置 MaxAllowedPacket, 那么就会向 MySQL 发送 查询 max_allowed_packet 的命令, 所以只要配置了MaxAllowedPacket 就可以避免发送命令.
在 dsn.go 的 parseDSNParams 方法中:
1 | case "maxAllowedPacket": |
发现只要在 MySQL 的 dsn 中配置 maxAllowedPacket 这个参数即可:
1 | maxPacketSize := 1<<30 - 1 // 1G, to avoid send query: SELECT @@max_allowed_packet |