切换导航
{{systemName}}
{{ info.Title }}
{{info.Title}}
{{ menu.Title }}
{{menu.Title}}
登录
|
退出
搜索
使用gorm不当出现too Many Connections的问题
作者:ych
业务中使用 golang+gin+gorm 开发,最近新上线了一个版本,发现在日活用户数只有几百的时候数据库频繁出现`too many connections`的错误,执行`show processlist;`查看数据库进程都在干嘛,发现了大量连接处于`sleep`的状态。 `show variables like '%max_connections%';`查看数据库最大连接数为`2000`多,不是数据库设置的问题 使用`gorm`设置空闲连接数,并发数和连接超时 ``` mysql.DB.DB().SetMaxIdleConns(50) mysql.DB.DB().SetMaxOpenConns(50) mysql.DB.DB().SetConnMaxLifetime(time.Hour) ``` 处查询使用了`db.Where(xxx).Rows()` >这里用了`if rows.Next()`会导致`row`结果集没有被取完,而且最后也没用主动关闭,造成连接数无法释放 修改为正确的姿势,解决了问题 ``` rows, err := db.Select("abs(sum(money)) as money").Rows() if err != nil { return } defer rows.Close() for rows.Next() { err = rows.Scan(&totalMoney) } ``` 测试中发现如果只使用`for rows.Next()`,不主动`rows.CLose()`,`gorm`也会主动帮你`close`掉连接的
相关推荐
golang 中解析 tag 是怎么实现的?反射原理是什么?(中高级肯定会问,比较难,需要自己多去总结)
golang map 使用注意的点,是否并发安全?
uint 类型溢出问题
golang orm框架 gorm
讲讲 Go 的 select 底层数据结构和一些特性?(难点,没有项目经常可能说不清,面试一般会问你项目中怎么使用select)
golang进行封包和拆包的完整解决方案
对已经关闭的 chan 进行读写,会怎么样?为什么?
调用函数传入结构体时,应该传值还是指针? (Golang 都是传值)
为 sync.WaitGroup 中Wait函数支持 WaitTimeout 功能.
讲讲 Go 的 defer 底层数据结构和一些特性?
Golang空结构体 struct{} 的使用
go defer,多个 defer 的顺序,defer 在什么时机会修改返回值?
Golang 单引号,双引号,反引号的区别?
序列化协议
Golang表示枚举类型的详细讲解
昨天那个在for循环里append元素的同事,今天还在么?
golang并发题目测试
交替打印数字和字母
golang面试题
for range 的时候它的地址会发生变化么?
数组和切片的区别 (基本必问)
实现阻塞读且并发安全的map
机器人坐标问题
复利计算 递归/非递归
在 golang 协程和channel配合使用
写出以下逻辑,要求每秒钟调用一次proc并保证程序不退出?
讲讲 Go 的 slice 底层数据结构和一些特性?
高并发下的锁与map的读写
判断两个给定的字符串排序后是否一致
常见语法题目2
字符串替换问题
常见语法题目1
golang 中 make 和 new 的区别?(基本必问)
七道语法找错题目
判断字符串中字符是否全都不同
golang 实现一个负载均衡案例(随机,轮训)
基本数据结构和算法
操作系统基本原理
翻转字符串
评论区
先去登录
版权所有:机遇屋在线 Copyright © 2021-2025 jiyuwu Co., Ltd.
鲁ICP备16042261号-1