我的网站的前端和数据库分别在两台服务器上,通过1000M局域网连接。
我发现几乎每个查询的响应时间都超过 800ms。我可以确保我的查询都是正确的,因为当我在单个服务器上部署它时,问题不会出现。
网站/asp.net 2.0 数据库/sql server 2000
答案1
如果您的 DNS 导致缓存 IP 地址 (本应如此) 出现 800 毫秒的延迟,则您的网络设置存在严重问题。恕我直言。您可以使用 ping 来查看是否存在问题。
使用 traceroute 确保数据包在两台计算机之间使用有效的路由。这很容易做到,因此在摆弄其他东西之前值得尝试一下。如果路由中有很多跳数,可能超过两三个,请找一个网络人员并问他为什么会这样。
尝试解决 SQL 网络问题时,最好使用非常简单的查询,如“SELECT GETDATE()”,并使用简单的查询工具,如 SQLCMD.EXE。简单查询意味着服务器不必花费大量时间来解析查询,不会有任何重大的锁定或阻塞,查询也不会通过网络带回数百万行数据。简单查询工具意味着您不必担心 IIS 可能会做什么或可能不会做什么。如果 IIS 服务器上没有安装 SQLCMD.EXE、OSQL.EXE 或类似工具,则可能需要编写一个小型 psh 或 vbs 脚本来测试与 SQL Server 的连接。如果您无法访问 IIS 服务器,您可能需要编写一个特殊的 ASP 页面,该页面只运行该简单查询并返回结果以及运行所需的时间。
如果我不得不猜测问题所在,那么应该是这样的-> 尤其是对于较旧的设备和驱动程序,请避免依赖 NIC 上的“自动协商”设置。手动将两张卡设置为相同的设置。
我知道这很麻烦,但我亲眼见过它解决了十几个让网络人员困惑的类似问题。(毕竟,这些都是服务器,它们不会插入许多不同的交换机,也不需要重新协商链路速度或双工设置。)
您还可以通过性能监视器观察网卡上的数据速率(以 MB/秒为单位)来发现此问题。一旦您建立了基线,请更改网卡上的设置并再次观察。
通常情况下,您可以“实时”更改这些设置,但我第一次尝试这些设置时,不会在高峰负载时间尝试。如果您有测试环境,最好在测试环境中进行试用。如果您有维护窗口,那就最好了。如果服务器中只有 1 个 NIC,请注意不要将 NIC 设置为无法与交换机通信,否则您可能不得不请某人亲自登录控制台,这对每个人来说都是件麻烦事。
答案2
可能的原因有很多。例如,可能是某个网络适配器驱动程序存在问题。
您必须检查 SQL 连接是否是瓶颈,或者是否是一般的网络问题。尝试从 Web 服务器发出“select getdate()”命令,查看是否每个查询都受到影响。
ping 数据库服务器的速度是否也很慢?另外,请尝试使用 IP 地址而不是服务器名称 - 这可能是 DNS 解析问题。