我运行一个流量合适的站点(每天约100,000页面浏览量),并且偶尔由于SQL Server超时错误而导致站点瘫痪。由于TempGetStateItemExclusive被连续调用,SQL Server请求超时
当我运行SQL事件探查器,我看到一个命令让所谓轻车熟路第二个这样的:
...
exec dbo.TempGetStateItemExclusive3 @id=N'ilooyuja4bnzodienj3idpni4ed2081b',...
...
我们使用SQL Server来存储ASP.NET会话状态。以上是调用存储过程来获取给定会话的会话状态。它似乎在循环,一遍又一遍地要求相同的2或3次会话。
我发现了一个promising looking hot fix似乎解决这种确切的情况,但它似乎并没有解决我们的问题。 (我假设此修补程序包含在最新的.NET服务包中,因为它看起来不像您可以直接安装它)。我手动添加了该注册表项,但我们仍然看到像上面那样的循环存储过程调用(请求每500ms更多次会话)
我一直无法在开发机器上重新创建此项。当对同一会话ID发出两个请求时,它似乎阻止了正确的操作,甚至尝试敲击SQL直到第一个页面释放会话。
任何想法?先谢谢你!!!
对于InProc和进程外会话状态都有明显的优点和缺点 - 如果你真的没有在SessionState中存储任何内容,或者更重要的是,在会话状态下不能轻易重建任何东西,那么InProc就没有问题。但是,如果您的会话需要保持应用程序重新启动或服务器切换(在负载平衡的环境中) - 例如购物车等,那么InProc并不是真正的“路要走”,因为它会在这些情况下失败。 – 2013-03-22 13:30:11
***关于'DeleteExpiredSessions'的性能问题***:https://sqlperformance.com/2013/01/t-sql-queries/optimize-aspstate – Kiquenet 2016-10-27 13:50:45
我也喜欢inProc,但是你不能在web-农场。 – visual 2017-10-20 00:51:32