【问题标题】:dbo.TempGetStateItemExclusive3 called repeatedlydbo.TempGetStateItemExclusive3 重复调用
【发布时间】:2013-03-12 11:11:17
【问题描述】:

我正在调查我们网站使用 SQL Server 管理会话的问题。该网站是基于 sitecore CMS 的 asp.net 网络表单。我们在各种环境中都有相同的代码,例如质量保证、分期和生产。

在生产中,我们看到的是,周期性地,我们得到一个快速上升的 CPU 使用率,这与服务器的流量没有任何关联。除了这个 cpu 峰值,我们还看到了网络 I/O 的相应峰值。

我们的监控软件不会区分到互联网的流量和到数据库服务器的流量;然而,我们在 DB 服务器上看到的是 每秒对 asp 会话数据库中的 dbo.TempGetStateItemExclusive3 的数百次调用,所有这些都针对相同的会话 id,并且没有相应数量的页面请求进入网络服务器。

使用相同的代码和配置,我们根本看不到其他环境的这种行为。对于其他会话 ID,我们也看不到它,只有这个特定的。

从数据库中删除该行只会导致使用相同的会话 ID 重新创建它。

更新

我在事件日志中发现了这个错误:

Violation of PRIMARY KEY constraint 'PK__ASPState__C9F49290145C0A3F'. Cannot insert duplicate key in object 'dbo.ASPStateTempSessions'. The duplicate key value is (sessionidwiththeproblem). The statement has been terminated.
Stack trace:

at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean\ breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand\ cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler,\ TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,\ RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,\ RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,\ RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult\ result, String methodName, Boolean sendToPipe)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at System.Web.SessionState.SqlSessionStateStore.SqlExecuteNonQueryWithRetry(SqlCommand\ cmd, Boolean ignoreInsertPKException, String id)

有人知道如何尝试创建重复的会话 ID 吗?

【问题讨论】:

  • 您是否能够看到这些峰值通常持续多长时间、它们发生的频率和/或它们在一天中的什么时间发生的模式?
  • 这只是在黑暗中拍摄,但您的应用程序池在不同环境之间的配置(显着)不同吗?我想知道大量的 DB 调用是否与生产应用程序池的某种计划/定期循环一致(应用程序池重置,并且 ASP.NET 运行时正在一次从 SQL Server 恢复所有未过期的会话) .
  • 峰值持续到应用程序池被回收。这通常会在一段时间内解决问题。没有真正的模式,它们似乎是随机发生的。我们以前每天都在预定的时间进行应用程序池回收,我们不得不将其更改为每 2 小时一次以尝试缓解此问题。如果它有帮助,我们有 2 个 Web 前端服务器使用粘性会话进行负载平衡。我们的 ISP 技术人员告诉我们,没有相应的流量通过 LB 进入,所以就像是某个失控的线程在进行这些调用。
  • 目前我们在生产服务器上面临同样的问题,但仍然没有找到对该行为的真正解释。只有应用程序池重启有帮助。
  • 您使用哪个监控软件

标签: asp.net sql-server sitecore session-state


【解决方案1】:

我们遇到了类似的问题,配置如下:

  • IIS 7.5
  • .NET Framework 4.0
  • Windows 2008(在 IIS 和数据库服务器上)
  • 由 ASPState 数据库管理的会话

问题在于,有时某些会话仍然锁定在 ASPState 数据库中,导致每个锁定会话每秒调用数百次 dbo.TempGetStateItemExclusive3。

IIS 服务器上的 CPU 最终会随着锁定会话的数量而增加。一个临时的解决方案是回收应用程序池。

进一步并在 IIS 服务器上启用跟踪,然后分析跟踪,我们注意到每当 EXECUTE_REQUEST_HANDLER 模块中出现问题(即导致 500 内部服务器错误的网络连接问题)时,下一个模块这是 RELEASE_REQUEST_STATE (并且应该解锁会话)没有被执行。因此会话保持锁定。

原来是 IIS 的一个错误,我们通过在 web.config 中将 uploadReadAheadSize 的值更改为 0 来修复它:

<system.webServer>
  <serverRuntime uploadReadAheadSize="0" />
</system.webServer>

UploadReadAheadSize 属性确定 Web 服务器将读入缓冲区并传递给 ISAPI 扩展的字节数。每个客户端请求都会发生一次。

另请参阅: ManagedPipelineHandler for an AJAX POST crashes if an IE9 user navigates away from a page while that call was in progress

【讨论】:

  • 我们在生产中看到了同样的问题,正在考虑使用您找到的解决方案。不过,我不熟悉该属性,而且我很难找到任何有关更改它对站点任何其他部分的影响的信息。您能否提供更多关于将此设置为 0 的其他影响的详细信息?
  • 哪个是SQL statement 用于查看会话保持锁定ASPState 数据库?如何监控 每秒数百次调用:SQL Profiler 还是其他软件?
  • IIS 执行哪些模块以及 order ?第一个 EXECUTE_REQUEST_HANDLER 模块,第二个 RELEASE_REQUEST_STATE,...
【解决方案2】:

看起来像是 SQL 问题,而不是 Sitecore 问题,可能与未清除的会话有关。我不是 DBA,但是否启用了 SQL 代理?您的生产 SQL Server 是否与其他环境处于不同的服务包/补丁级别(this 文章提到了一些针对类似问题的旧修补程序)?

一些链接供调查,直到有人可以更具体地回答这个问题!您可能希望包含一些有关您正在使用的 SQL 版本的信息。

http://jerschneid.blogspot.co.uk/2010/01/aspnet-sql-server-requests-timing-out.html

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

【讨论】:

  • 感谢您的输入,是的,SQL 代理正在运行,并且清理作业正在正确运行。 sessionstate 表中可能有 400 行,数据库大约 15 MB。
【解决方案3】:

要探索可能存在于 IIS 中的应用程序设置中的概念,您可以使用 Web 部署 (msdeploy) 转储站点的配置。然后比较显示问题的框和没有问题的框的输出。

这样的东西会输出到控制台

msdeploy –verb:dump –source:appHostConfig="Default Web Site"

或作为 XML

msdeploy –verb:dump –source:appHostConfig="Default Web Site" -xml

http://technet.microsoft.com/en-us/library/dd569101(v=ws.10).aspx

【讨论】:

    猜你喜欢
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 2019-09-17
    • 2011-07-05
    • 2011-02-05
    • 1970-01-01
    相关资源
    最近更新 更多