dbo.TempGetStateItemExclusive3一再呼吁(dbo.TempGetStat

2019-08-17 21:18发布

我调查与我们的网站,使用SQL Server管理会话的一个问题。 该网站是根据各地的Sitecore的CMS asp.net web表单。 我们在各种环境如QA,分期和生产相同的代码。

在生产中,我们看到的是,周期性的,我们得到了一个快速上升的CPU使用率不以任何方式关联到业务服务器。 随着这种CPU尖峰,我们看到在网络I / O一个对应的针头。

我们的监控软件不会流量区分出来的互联网和通信到DB服务器; 然而,我们所看到的DB服务器上字面上每秒数百个呼叫的dbo.TempGetStateItemExclusive3在ASP会话数据库,全部为相同的会话ID,并进入了Web服务器的页面请求没有相应的金额。

在相同的代码和配置,我们根本看不到这种行为的其他环境。 我们还没有看到它用于其他会话ID,仅这一个特定的一个。

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

UPDATE

我发现在事件日志中此错误:

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可能被尝试任何想法?

Answer 1:

我们面临着一种具有下述构成一个类似的问题:

  • IIS 7.5
  • .NET Framework 4.0中
  • Windows 2008中(同时在IIS和DB服务器)
  • 由ASPState的数据库管理会议

问题是,有时某些会议的仍然锁定在ASPState的数据库,造成每秒数百个呼叫dbo.TempGetStateItemExclusive3每个锁定会议的。

在IIS服务器上的CPU将最终去了锁定会话的数量。 一个临时的解决办法是回收应用程序池。

进一步说并启用IIS服务器(S)的跟踪,然后分析我们发现的痕迹,每当有一个问题EXECUTE_REQUEST_HANDLER模块(导致500内部服务器错误即网络连接问题),下一个模块是RELEASE_REQUEST_STATE (应该解锁会话)中的溶液不被执行。 因此,会话保持锁定状态。

它打开了从IIS中的错误,我们通过在web.config中应将UploadReadAheadSize的值更改为0固定它:

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

该应将UploadReadAheadSize属性建立字节的Web服务器将读入缓冲区并传递到ISAPI扩展的数量。 这种情况发生时每个客户端请求一次。

另请参阅: 如果IE9用户从一个页面,而呼叫正在进行导航离开ManagedPipelineHandler一个AJAX POST崩溃



Answer 2:

看起来像一个SQL问题,而不是一个Sitecore的,可能与没有被清理会话。 我不是一个DBA,但启用了SQL代理? 是您生产SQL服务器在不同的服务包/补丁级别的其他环境( 该文章中提到的一些旧的修补程序的一个类似的问题)?

调查一些链接,直到也许有人可以更具体地回答这个问题! 您可能要包括你使用的是什么版本的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/



Answer 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



文章来源: dbo.TempGetStateItemExclusive3 called repeatedly