【问题标题】:preventing from deal lock and race condition in sql server stored procedure防止 sql server 存储过程中的交易锁定和竞争条件
【发布时间】: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


【解决方案1】:

如果你想阻止 SP 的并发执行,那么有一种方法。使用所谓的SQL Server Application locks.

你也可以通过这个link也可以

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    相关资源
    最近更新 更多