我调查与我们的网站,使用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可能被尝试任何想法?