gpt4 book ai didi

asp.net - 由于连续调用 TempGetStateItemExclusive,SQL Server 请求超时

转载 作者:行者123 更新时间:2023-12-03 00:18:35 26 4
gpt4 key购买 nike

我运行的网站流量不错(每天约 100,000 次页面浏览),但该网站偶尔会因 SQL Server 超时错误而瘫痪。

当我运行 SQL Profiler 时,我看到一个命令每秒被调用数百次,如下所示:

...
exec dbo.TempGetStateItemExclusive3 @id=N'ilooyuja4bnzodienj3idpni4ed2081b',...
...

我们使用 SQL Server 来存储 ASP.NET session 状态。上面是为获取给定 session 的 session 状态而调用的存储过程。它似乎在循环,一遍又一遍地要求相同的 2 或 3 个 session 。

我找到了promising looking hot fix这似乎解决了这个确切的情况,但它似乎并没有为我们解决问题。 (我假设此修补程序包含在最新的 .NET 服务包中,因为它看起来不再可以直接安装)。我手动添加了该注册表项,但我们仍然看到像上面这样的循环存储过程调用(请求同一 session 的频率远高于每 500 毫秒一次)

我无法在开发机器上重新创建它。当对同一个 session ID发出两个请求时,它似乎正确地阻塞,甚至尝试命中SQL,直到第一页释放 session 。

有什么想法吗?预先感谢您!!!

最佳答案

这可能是我需要不同问题的答案的情况之一。问题应该是“为什么我使用 SQL 来存储 session 状态信息?” SQL 速度慢得多,并且与 Web 服务器的连接更加断开,这两者都可能导致此问题。我查看了 ASPStateTempSessions 表的大小,发现它只有 1MB 左右。我们搬回<sessionState mode="InProc" ... />问题已解决(并且网站运行速度更快)

下一步,当流量需要时,将添加另一个服务器并使用“StateServer”模式,以便我们可以分散内存使用。

我认为我最初采取这一举措是为了解决不再是问题的内存瓶颈。 (这不是处理内存瓶颈的好解决方案,仅供引用!)

重要编辑:好吧,事实证明整个“TempGetStateItemExclusive”并不是问题,它只是另一个问题的症状。我们有一些查询导致了阻塞问题,因此每个 SQL 请求都会被踢出。实际的修复是识别并修复阻塞问题。 (不过,我仍然相信“InProc”是正确的选择)此链接对识别我们的问题有很大帮助:

http://www.simple-talk.com/sql/sql-tools/how-to-identify-blocking-problems-with-sql-profiler/

关于asp.net - 由于连续调用 TempGetStateItemExclusive,SQL Server 请求超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2156876/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com