Gorm

TIME_WATI 数量达到 300 多个, 连接中的数量只有几个。

设置

设置下最大连接数(100)和闲置连接数(50)以及连接的时间(1 小时)

从 [2] 文章测评来看,unlimited ConnMaxLifetime 的情况下,时间和内存分配上都会少。 该 ConnMaxLifetime 使用场景如:

你的 SQL 数据库实现了最大的连接生存期, 或你希望在负载均衡器后面方便的切换数据库 (这句话不是很懂)

SetMaxIdleConns 设置

维护一个大的空闲连接池,副作用是有的,占用内存。另外一种可能是,如果一个连接空闲太久,那么它也可能变得不可用。例如 Mysql 的 wait_timeout 设置将自动关闭 8 小时内未使用的任何连接(默认情况下), 当发生这种情况时,sql.DB 会优雅的处理它。 在放弃之前,将自动重试两次连接,之后 Go 将从池中删除坏连接并创建新连接。

超出连接限制

如果数据连接限制为 5 个,一旦达到 5 个连接的硬限制,pg 数据库驱动程序立即返回一条 sorry, too many clients already 错误信息, 而不是完成插入操作。

参考

  1. 分析 golang sql 连接池大量的 time wait 问题 http://xiaorui.cc/archives/5771

  2. 配置 sql.DB 获得更好的性能 https://colobu.com/2019/05/27/configuring-sql-DB-for-better-performance/


·End·
最后修改 January 18, 2021 : fix only one h1 in page (76541b8)