我在使用 SQL 服务器(或 IIS,但我很确定是 SQL)时遇到了问题
我之前曾发布过一个更模糊的问题,但它仍然在发生,而且我有一些更详细的信息。
问题: 当 IIS 网站尝试访问 SQL Server 2008r2 到网站 (iis 7) 时,数据传输速度似乎受到限制。速度似乎被限制为每秒 1Mb。
如果我重新启动数据库服务或使数据库脱机,这个问题就会自行解决,但我不想每周都这样做。
一些故障排除:
- 从同一台机器传输文件没有问题,所以我不认为是网络问题。
- 我可以从本地 SQL 管理工作室连接,并查询相同的数据库
- 与 SQL 服务器位于同一 IIS 服务器上的其他网站不会与其他数据库通信
- 将我们的开发服务器指向有问题的实时数据库也存在同样的问题
- 获取数据库副本并将其放在另一个 SQL 上不会出现问题
因此,我认为我已经将其缩小到 SQL 中的一个数据库似乎在将数据传输到 IIS 时出现间歇性故障。
- 知道是什么原因造成的吗?
- 为什么正常工作了几天就出现这种情况了?
- 我应该从哪里开始排除故障?
编辑 1:新信息 我做了更多的测试,似乎是一个特定的存储过程,只是有时,只使用 10% 的网络速度。
当我摆弄 SP 时,除了“调整它”之外什么都不做似乎都无法打破瓶颈,因此它又开始正常工作了。
救命,这让我发疯了!
谢谢
答案1
将我们的开发服务器指向有问题的实时数据库也存在同样的问题
这表明是这个问题与该特定 Web 应用程序有关,因为您说其他 Web 应用程序没有这个问题。除非其他 Web 应用程序使用完全不同的数据库数据,否则性能至少应该相当。
您要做的是,在数据库上运行服务器端跟踪,并仅捕获来自该服务器的每个 SQL 调用的持续时间和行集大小 - 并可能从另一台服务器捕获每个 SQL 调用的持续时间和行集大小以进行比较。
然后,您可以根据 perfmon 捕获的 SQL 服务器和 IIS 计算机的数据绘制此图表 - 是的,SQL Server Profiler 完全支持这种情况 :)
这将为您输入的所有数据产生可缩放、可滚动和可点击的图表;有关如何设置的详细信息,请参阅 SQL Server Profiler 帮助 (BOL)。
答案2
如果问题似乎出在单个 SP 上,而“调整”它似乎可以解决问题,那么问题可能出在编译的执行计划上——它可能针对一组参数进行了编译,这导致它对于其他更常见的参数集运行得更慢。
下次遇到问题时,请尝试运行dbcc freeproccache
并查看是否能解决问题。如果能,您可以WITH RECOMPILE
向 SP 本身添加提示以停止缓存计划。