访问一个内部调研页面,打开第二次就死锁了,搜索了一下,一种可能的情况类似下面这种场景,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)与另一个进程被死锁在 锁 |