我运行了一个流量不错的网站(每天大约 100,000 次页面浏览量),但由于 SQL Server 超时错误,该网站偶尔会瘫痪。
当我运行 SQL Profiler 时,我看到一个命令每秒被调用数百次,如下所示:
...
exec dbo.TempGetStateItemExclusive3 @id=N'ilooyuja4bnzodienj3idpni4ed2081b',...
...
我们使用 SQL Server 来存储 ASP.NET 会话状态。以上是为获取给定会话的会话状态而调用的存储过程。它似乎在循环,一遍又一遍地要求相同的 2 或 3 个会话。
我找到了一个看起来很有希望的热修复程序,它似乎可以解决这个确切的情况,但它似乎并没有为我们解决问题。(我假设此修补程序包含在最新的 .NET 服务包中,因为它看起来不像您可以直接安装它)。我手动添加了该注册表项,但我们仍然看到像上面这样的循环存储过程调用(比每 500 毫秒更频繁地请求同一个会话)
我无法在开发机器上重新创建它。当对同一个会话 ID 发出两个请求时,它似乎会正确阻塞,甚至会尝试命中 SQL,直到第一页释放会话。
有任何想法吗?先感谢您!!!