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

问题描述 投票:-2回答:1

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

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

sql sql-server-2012 deadlock
1个回答
0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.