由于两次会话同时访问相同的存储过程,因此发生了事务(进程ID)死锁

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了由于两次会话同时访问相同的存储过程,因此发生了事务(进程ID)死锁相关的知识,希望对你有一定的参考价值。

当2个会话访问相同的存储过程时发生以下错误(通过2个用户/会话同时访问相同的存储过程发生死锁)。错误:事务(进程ID)在锁资源上与另一个进程死锁,并被选为死锁牺牲品。重新运行该交易。

写入的存储过程基于where子句中的日期过滤器删除数据。如何在此场景或任何替代方案中使用SET DEADLOCK_PRIORITY。

答案

当您使用共享资源进行线程处理时,您可能会遇到此类行为。如果您想要更精确的答案,请提供更多信息。

当一个进程需要访问另一个进程锁定的数据时,就会发生死锁。另一个进程想要从第一个进程访问数据,因此两者都无法继续。 SQL Server非常聪明,可以识别这个混乱并选择一个喜欢或停止这两个进程。

要解决此问题,最好尽可能不设置DEADLOCK优先级。具有相同优先级的用户也可能导致DEADLOCK。最好的方法是在删除时同步访问。当其中一个删除过程在表上处于活动状态时,另一个应该等待。

这是这种同步的一个很好的例子:SQL Server - How to lock a table until a stored procedure finishes

以上是关于由于两次会话同时访问相同的存储过程,因此发生了事务(进程ID)死锁的主要内容,如果未能解决你的问题,请参考以下文章

当两个应用程序同时访问一个localspark会话实例时发生错误。调用o2402.defaultParallelism

什么是脏读,幻读和不可重复读

服务同时调用两次

脏读与不可重复读

脏读不可重复读幻读

mysql pdo 事务和会话存储