Ben*_*son 13 sql-server asp.net sitecore session-state
我正在调查我们的网站使用SQL服务器管理会话的问题.该网站是基于sitecore CMS的asp.net webforms.我们在各种环境中拥有相同的代码,例如QA,登台和制作.
在生产中,我们所看到的是,我们定期获得快速增长的CPU使用率,这与CPU与服务器的流量无关.随着这个CPU峰值,我们看到网络I/O相应的峰值.
我们的监控软件不区分流量到互联网和流量到数据库服务器; 但是,我们在数据库服务器上看到的内容实际上是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)
Run Code Online (Sandbox Code Playgroud)
有人想知道如何创建重复的会话ID吗?
小智 7
我们遇到了类似的问题,具有以下配置:
问题是有时某些会话仍然锁定在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>
Run Code Online (Sandbox Code Playgroud)
UploadReadAheadSize属性确定Web服务器将读入缓冲区并传递给ISAPI扩展的字节数.每个客户端请求发生一次.
另请参阅: 如果IE9用户在该调用正在进行时离开页面,则AJAX POST的ManagedPipelineHandler崩溃
看起来像是 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/
| 归档时间: |
|
| 查看次数: |
9466 次 |
| 最近记录: |