【发布时间】:2014-12-08 09:12:55
【问题描述】:
我有一个这样的存储过程:
{
delete from outbox where status=1 // delete previous sent record
update outbox set status=1 where .... // flag some record
select from outbox where status=1 // select them for send
}
多个线程调用这个存储过程,发生死锁。 1. 存储过程中每个查询之间是否有释放锁的解决方案? 或者 2.防止SP(SP)并发执行?
谢谢
【问题讨论】:
-
分批做......
-
正确规划您的锁定。提示可以避免锁定。 tx 隔离级别也可以。你有控制权——你只是不使用它。这是 SQL 基础知识......
-
如果您在发件箱中指定要删除和更新的特定项目,并在您的选择中指定
WITH (NOLOCK),您应该会有更好的结果。但是你不能像那样运行删除和更新,希望不要出现死锁
标签: sql-server stored-procedures deadlock race-condition