事务(进程 ID 70)与另一个进程被死锁在 锁 | 通信缓冲区 资源上

访问一个内部调研页面,打开第二次就死锁了,搜索了一下,一种可能的情况类似下面这种场景,SQLServer中似乎嵌套的SQL语句会造成死锁,用nolock hint可以解决这个问题。

update  t_sms_send set msg_flag = -1  where id in (select top 100 id from t_sms_send  where msg_flag=-2) 
此句应该改为update  t_sms_send set msg_flag = -1  where id in (select top 100 id from t_sms_send with (nolock) where msg_flag=-2)

但是MySQL中并不支持nolock,MySQL的对应写法是:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM Tablename ;
COMMIT ;

或者配置为mysqld默认

[mysqld] transaction-isolation = READ-UNCOMMITTED

事务(进程 ID 70)与另一个进程被死锁在 锁 | 通信缓冲区 资源上,并且已被选作死锁牺牲品。请重新运行该事务。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Data.SqlClient.SqlException: 事务(进程 ID 70)与另一个进程被死锁在 锁 | 通信缓冲区 资源上,并且已被选作死锁牺牲品。请重新运行该事务。
源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪:

[SqlException (0x80131904): 事务(进程 ID 70)与另一个进程被死锁在 锁 | 通信缓冲区 资源上,并且已被选作死锁牺牲品。请重新运行该事务。] System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +212
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +245
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2811
System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async) +2479231 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) +470
System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +182
Microsoft.Practices.EnterpriseLibrary.Data.Database.DoExecuteNonQuery(DbCommand command) +251
Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteNonQuery(DbCommand command) +63
DBUtility.DbbHelper.SetSqlStrNonQuery(DbTransaction tran, String query, DbParameter[] param) in D:\WQB\project\培训会议系统\web1\web\DBUtility\DbbHelper.cs:227
DBUtility.DbbHelper.SetSqlStrNonQuery(String query, DbParameter[] param) in D:\WQB\project\培训会议系统\web1\web\DBUtility\DbbHelper.cs:218
CardProject.admin.Survey.KS_Parper.dx() +3436
CardProject.admin.Survey.KS_Parper.Save() +52
CardProject.admin.Survey.KS_Parper.Page_Load(Object sender, EventArgs e) +4102
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +42
System.Web.UI.Control.OnLoad(EventArgs e) +132
System.Web.UI.Control.LoadRecursive() +66 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2428

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注