Go数据库客户端杀死了比预期更多的SQL Server连接

Roh*_*anC 5 sql-server go

作为调试我们服务器上的一些其他问题的一部分,我注意到一些关于我希望理解的连接的奇怪行为.

我有2台服务器,其中一台与SQL Server RDS实例通信,另一台服务器与Azure中的托管SQL Server实例通信.

我相信2个后端的工作方式略有不同--RDS有一个端口(1433),客户端在其上进行身份验证,然后建立连接.Azure SQL似乎在端口1433上进行身份验证,然后将客户端重定向到实际处理连接的另一个服务.

在这两种情况下,我都在服务器上运行大量负载.至少500个请求/秒,峰值约为2k req/s.这些请求中的每一个都会产生一个Select查询,该查询返回带有主键查找的单行 - 因此与SQL的连接非常短.每个查询的平均时间为50-80ms,p95在100-150ms范围内

行为我试图理解:

我正在使用带有MS-SQL实现的go数据库/ sql驱动程序(特别是go-mssqldb).

我已将Max Idle连接和Max Open连接设置为64.

我期望的是:64长时间运行已建立的连接偶尔会闲置但很快就会重复使用.

我所看到的:通常是64个已建立的连接,数量通常会下降到50到64之间.这也会导致在任何给定时间处于TIME_WAIT状态的200-400个连接.

什么可能导致这种行为?这是一个事实,那个司机懒洋洋地关闭连接?如果是这样,为什么数字会降到64以下?

我很乐意提供更多细节!