【发布时间】:2017-01-05 14:41:09
【问题描述】:
我正在我的系统上运行负载测试。在负载达到一定水平时,我的日志中开始出现 SQL 错误:
System.Data.SqlClient.SqlException (0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:Named Pipes Prprovidererror: 40 - could not operrorconnection to SQL Server)---> System.ComponentModel.Win32Exception (0x80004005): The network path was not found
通过在有问题的 SQL 服务器上运行性能监视器,我发现了以下内容:
- CPU 级别很少超过 50%。 (在之前的迭代中,我看到它达到了 100% 的最大值,因此我增加了 VM 的规格,这有助于将问题推到更高的负载水平。)
- 用户连接数超过 8,000。 Sql Server 的默认设置为最大连接数 32,767。
- 连接字符串指定每个数据库的最大池大小为 1000 个连接,服务器上有 100 个数据库。负载测试在 100 个数据库之间随机分布,因此应该有一个相当均匀的分布,这意味着每个数据库大约有 80 个连接。远未达到 1k 的上限。
还有哪些其他因素可能导致 Sql Server 无法接受连接?
更新: 额外信息:我正在使用 Entity Framework Core (EF7) 进行数据库连接,如果有帮助的话。
【问题讨论】:
-
网络设置?您是否在 Sql Server 网络设置上验证 TCP/IP 已启用并且 IP 也已启用? technet.microsoft.com/en-us/library/hh231672(v=sql.110).aspx
-
@NicoRiff 该问题仅在高负载时出现。否则它会起作用,因此它不能是网络设置,除非网络设置有某种限制设置。
-
@ShaulBehr,SQL Server 错误日志中有任何相关错误吗?多少台客户端机器?数据库服务器上的任何单个 CPU 内核是否始终显示出比其他内核高得多的利用率?
-
@DanGuzman SQL 错误日志中没有任何内容。 42 台客户端机器。如何了解各个 CPU 内核?
-
哦,NM,显然,使用资源监视器......好吧,我想我必须重新运行我的测试才能找到答案。如果几个 CPU 过载,这意味着什么?
标签: c# sql-server tcp load-testing sql-server-2016