问题:
尝试使用单独的 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,并获取测试运行时正在进行的网络活动的痕迹,看看是否出现任何异常,或者两者是否正确匹配。