Go数据库客户端终止与SQL Server的连接超过预期

时间:2018-10-29 19:02:47

标签: sql-server go

作为调试服务器上其他问题的一部分,我注意到了一些我希望理解的关于连接的异常行为。

我有2台go服务器,其中一台与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)。

我已将“最大空闲”连接和“最大打开”连接设置为64。

我期望的是 :64个长期运行的已建立连接偶尔会空闲,但很快会被重用。

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

什么可能导致此行为?只是go驱动程序懒惰地关闭了连接?如果是这样,为什么数字会降到64以下?

我很乐意提供更多详细信息!

0 个答案:

没有答案