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