当前位置: 代码迷 >> Sql Server >> 经常死锁怎么处理
  详细解决方案

经常死锁怎么处理

热度:53   发布时间:2016-04-24 09:00:28.0
经常死锁怎么办。
2015-06-10 16:37:10,388 [39] ERROR  BLL.WxUserInfo [(null)] <(null)>
 - System.Data.SqlClient.SqlException: Transaction (Process ID 98) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
   在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
   在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
   在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   在 System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
   在 System.Data.SqlClient.SqlDataReader.get_MetaData()
   在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
   在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
   在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
   在 System.Data.SqlClient.SqlCommand.ExecuteScalar()
   在 SubSonic.SqlDataProvider.ExecuteScalar(QueryCommand qry)
   在 SubSonic.DataService.ExecuteScalar(QueryCommand cmd)
   在 SubSonic.ActiveRecord`1.Save(String userName)
   在 PirateBay.WebWeiXin.BLL.WxUserInfo.SaveToDb(WxUserInfo pWxUserInfo, WxUser pWxUser, Boolean pIsNew)
------解决思路----------------------


通过sql profiler来监控一下死锁吧,然后找找原因是什么,看看能否避免,或者是修改代码。

其实死锁主要是因为访问资源的时候,用不同顺序来获取资源,就容易导致 相互锁住,最后导致死锁
------解决思路----------------------
修改业务逻辑,更新处理方式。尽量避免资源竞争,事务尽量短小精干
------解决思路----------------------
更新多表使用相同的順序
------解决思路----------------------
看是哪些语句导致的,这样才好想办法
------解决思路----------------------
跟踪一下,看看是不是语句有问题
  相关解决方案