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 |