最近,我们的低使用率服务设法在其连接池中保留单个连接(没有可以打开第二个连接的并发请求),并且其目标已降级为只读副本.因此,对服务的每个写入操作都会失败,直到重新启动为止.如果与群集建立了新连接,那就不会发生这种情况.
问题是我找不到记录的方法来丢弃某些类型的错误的连接.数据库/ sql中唯一听起来正确的公共方法是Conn.Close,它返回到池的连接而不关闭它.不调用它会导致资源泄漏,最终导致池无法使用.在应用程序想要时,是否有可持续的方法来摆脱连接?
解决方法
前段时间,我们从lib / pq的数据库/ sq切换到纯Go jackc/pgx,原因类似(无法控制低级别的连接),并对结果感到满意.该模块提供ConnPool.Reset
,听起来像你想要的:
Reset closes all open connections,but leaves the pool open. It is intended for use when an error is detected that would disrupt all connections (such as a network interruption or a server state change).
It is safe to reset a pool while connections are checked out. Those connections will be closed when they are returned to the pool.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。