我们遇到了与 SQL Server 的连接问题,经过一周的深入研究后,我能够将其确定为 Winsock 限制。这是描述:
- 我们在 Windows Server 2012 R2 上运行了 SQL Server 2014(和 2016)Ent 安装。虚拟化与非虚拟化。我们在两种环境中都观察到了这个问题。
- 客户端不使用连接池(请不要建议打开它,这是问题的根源,我知道,但我对此无能为力)
- 客户端以极高的速度创建和关闭新连接:通常,单个客户端每秒关闭/打开 1500 个连接。每个 SQL Server 有 20-25 个客户端同时执行此操作。
现在,在工作日的某些时间点,我们会遇到流量突发,这实质上使新连接速率飙升至每秒 2500-3500 次连接尝试,并持续大约 2-3 秒。
这就是乐趣开始的时候:客户端在相同的 2-3 秒突发期间收到连接错误。
这就是我们在所有这些连接尝试的网络跟踪中看到的:

我们已经确认和所做的:
- 这不是端口耗尽,无论是在服务器上还是在客户端上。
- 这不是SQL Server 工作线程耗尽。以下是演示它的图表:

- 这是不是一个
TIME_WAIT问题,由客户以前的连接是优雅与关闭FIN, ACK- ACK- FIN, ACK-ACK序列。
- 连接未到达 SQL Server 并被 Winsock 拒绝。这是一个演示它的 PerfMon 图:

- 我们尝试调整 NIC 设置和 Windows TCP/IP 功能设置(RSS、TSO、缩放窗口 - …