不在同一台机器上的 IIS 和 SQL Server 性能问题

不在同一台机器上的 IIS 和 SQL Server 性能问题

问题:

尝试使用单独的 SQL Server 2017 和 IIS 7.5 服务器获得与在同一台机器上安装两者相同(或更好)的性能。

尝试实现可扩展性以实现未来的增长。

使用 WebSurge 在运行 IIS 和 SQL Server 2017 Developer 的同一台机器上测试速度,该机器具有 6 核 32GB 内存和 12 个逻辑处理器,机器没有出现重大性能问题。我们可以在 WebSurge 上以每秒 4000 个请求的速度运行下面的代码,速度非常快。

问题:

一旦我们在本地 LAN 上同一千兆位连接上的单独 IIS 框和单独 SQL Server 上运行相同的代码,我们只能在运行在其自身框上的 IIS 上获得每秒约 350 个请求。注意:SQL Server 在运行这 350 个请求的框上使用的 CPU 不到 1%,因此这不是查询或 SQL Server 性能的问题,因为相同的代码在同一台机器上使用 IIS 运行超过 4000 个。

LAN 电缆插入同一个交换机,从 IIS 到 SQL Server 的 PING 始终小于 1ms。

我们做错了什么,导致完成的请求速度急剧减慢,但当在同一个 IIS/SQL Server 框上再次运行时......它每秒超过 4000 个。

我们计划很快创建一个大型服务,其网络流量将远远超过每秒 4000 个请求,因此我们将需要额外的服务器、负载平衡器等。我们目前正在尝试了解为什么我们只能从 IIS 框每秒处理 350 个请求,而不是在与服务器相同的机器上。

我还要指出的是,在两种情况下,CPU 的运行率都不会超过 50%。

运行此代码时,SQL Server 仅消耗约 10%。

<%
rangedb="Provider=SQLOLEDB;" & _ 
        "Data Source=10.10.1.220,1433;" & _ 
        "Initial Catalog=xxxxxxx;" & _ 
        "Network=DBMSSOCN;" & _ 
        "User Id=xxxxxx;" & _ 
        "Password=xxxxxx" 

set cnn = Server.CreateObject("ADODB.Connection")
set rst = Server.CreateObject("ADODB.RecordSet")

cnn.open rangedb

sqltext = "SELECT page_content,template_id FROM master_templates_data where  (template_id='165' or template_id='166' or template_id='167' or template_id='168' or template_id='169' or template_id='170' or template_id='171' or template_id='172' or template_id='173' or template_id='182' or template_id='183' or template_id='184' or template_id='185' or template_id='186' or template_id='187' or template_id='188' or template_id='189')"

rst.CursorLocation=2
rst.CursorType=0
rst.LockType=1
rst.Open sqltext,cnn

dataArray = rst.GetRows()

rst.close

cnn.close
%>

我们搜索了整个互联网但找不到原因。

任何帮助,将不胜感激!

(是的,我们知道经典的 ASP 不适合这样的项目,但我们希望根据当前情况解决这个问题)

如果有更好的替代方案,例如 MySQL 和 PHP/Linux,我们愿意探讨如何提高性能。

这是我们第一次在这里发帖,所以请多多包涵 :)

此外,我们尝试运行 SELECT 1 作为查询,它在单独的 IIS 框上提升到大约 800 rps,但在 IIS 和 SQL 共存的框上跳转到 14,000。

尝试找出速度故障发生的位置,因为我们使用的是千兆内联网,盒子都插在同一个交换机上,ping 时间小于 1 毫秒

目前,此测试未激活任何病毒或防火墙,以排除这些可能性。

更新:

我继续将两台计算机直接插入在一起,并将它们放在同一个交换机上,然后运行吞吐量测试,我能够实现低于 1gb 的数据传输速度(无文件传输),因此连接似乎达到了标准。

我还重新运行了 Web 服务器测试,发现使用另一台计算机的单独机器上的 IIS 每秒可以处理大约 900 个请求。

似乎两台不同的机器上使用相同的脚本和软件的 IIS ASP 和 SQL 的运行速度比在本地机器上慢了 4 倍。

数据库是从固态硬盘中提取数据,因此驱动器速度不应该是问题,因为它也是本地问题(驱动程序驻留在 SQL 服务器计算机上,而不是文件服务器上)

答案1

您应该确保网卡上的双工设置全部匹配。始终必须具有相同的双工设置,无论是所有位置的自动设置,还是 1 Gbps 全双工。这意味着检查每台服务器的网卡上的双工设置,以及它们之间的任何硬件,如交换机。

接下来,我将在两个盒子上运行 wireshark,并获取测试运行时正在进行的网络活动的痕迹,看看是否出现任何异常,或者两者是否正确匹配。

相关内容