【问题标题】:WAITFOR for concurrency issue in SQL等待 SQL 中的并发问题
【发布时间】:2012-02-10 06:33:28
【问题描述】:

我们有一个复杂的存储过程,它首先执行 INSERTS,然后在特定行中执行 UPDATES。理想情况下,如果用户 2 命中相同的 SP 并且必须发生一些 SELECTS 而不是 UPDATES,则在完成此请求后。 如果在第一次操作中同时出现多个请求,那么我们自然会在该 UPDATE 上遇到死锁。

我们正在考虑实现 WAITFOR,这样 SP 在启动之前首先在全局临时表中设置一个标志,如果第二个请求到来,它会等待一段时间再试一次,这样在 10 秒后,它可以尝试再次,如果它看到更新完成,它可以完全跳到 SELECT 逻辑。这样我们感觉没有用户会陷入死锁,在说 5-10 秒后最终会返回结果。

是像这样使用 WAITFOR 还是一个数据库架构问题来解决一些可能的未来问题?

【问题讨论】:

    标签: stored-procedures concurrency sql-server-2008-r2


    【解决方案1】:

    这是一个非常冒险的想法,数据库已经有很多工具可以让您同时插入和更新记录。您可以使用事务和提示来降低死锁的风险。通常不正确的索引会导致大量死锁。

    在 SQL proc 中实现自旋锁通常会出错。

    我在博客上写了一些你可以使用的模式:http://samsaffron.com/archive/2008/08/27/Deadlocked+

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 2011-11-11
      • 2017-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多