ASP.NET 会话状态 SQL Server 2008 R2 因 CPU 使用率过高而冻结

ASP.NET 会话状态 SQL Server 2008 R2 因 CPU 使用率过高而冻结

我们的 ASP.Net 网站使用 SQL Server 作为会话状态提供程序。我们目前在 SQL Server 2005 上托管数据库,因为它在 2008 R2 上运行不佳。我们想知道原因,以及如何修复它。

硬件设置我们当前的会话状态服务器使用 SQL Server 2005,文件托管在单个本地磁盘上。它是我们最老的服务器之一,因为它为我们提供了良好的服务,我们从未觉得有必要升级它。数据库大约有 2 GB,可容纳 6000 个会话。(会话有点大,但我们需要它。)我们还有另一台服务器,它使用 SQL Server 2008 R2,CPU 速度更快,RAM 也更多。编辑:我对硬盘速度更快的说法撒了谎。旧服务器有一个 15K 36GB SAS 硬盘。新服务器有一个 15K 硬盘的 raid 1 镜像,有 136GB 可用空间。

情况有一天,我们的流量激增。SQL Server 上的事务日志增长导致服务器冻结了 10 秒,几分钟内只允许几个请求通过。因此,我们在新服务器上加载了包含大量数据和日志文件的 ASPState,并将所有应用程序指向新服务器。它运行良好约 5 分钟,然后 CPU 使用率跃升至标准版可使用的 16 个内核的 50%,并一次冻结 10 秒。文件不记录任何自动增长事件。磁盘队列良好且低。RAM 使用率低。

我们旧服务器上的 CPU 使用率从未超过 5%。新服务器上发生了什么?

或者,我想听听在 SQL Server 2008 R2 上运行的 ASP.NET 会话状态服务器的成功案例,平均写入负载为 30MB/秒,最高可达 200MB/秒。

答案1

您的第一台服务器,使用 SQL Server 2005,在事务日志大量增加的情况下运行正常。您可以使用一些技巧来提高 mdf 文件的文件增长速度,但不能提高 ldf 文件的文件增长速度。

http://www.mssqltips.com/sqlservertip/1572/configuring-windows-instant-file-initialization-for-sql-server-2005/

根据以上信息,我不确定该如何告诉您有关您的第二台服务器的信息。但是,磁盘队列可能不是您在此处寻找的指标。您可能需要 Perfmon 计数器逻辑磁盘:平均磁盘秒/写入或其等效值,并且 ldfs 的最佳值(平均值)为 5ms 或以下。

根据“速度更快的硬盘”,我猜您没有使用 RAID。尽管磁盘队列数量很多,但您仍有可能遇到磁盘写入压力。您还可能遇到闩锁或锁定等待。

以下是有助于诊断等待的查询:

http://www.brentozar.com/responder/triage-wait-stats-in-sql-server/

相关内容