我们有一个复杂的存储过程,它首先在特定行中执行插入,然后执行更新。理想情况下,在此请求完成后,如果用户2命中相同的SP,则必须进行一些选择,而不是更新。如果多个请求同时进行第一次操作,那么我们在更新时自然会出现死锁。
我们正在考虑实现WAITFOR,这样SP在启动之前首先在全局临时表中设置一个标志,如果第二个请求到来,它会等待一段时间重试,这样在例如10秒后,它可以重试,如果它看到更新完成,它可以完全跳过选择逻辑。这样,我们觉得没有用户会死锁,在5-10秒后,最终会得到返回的结果。
像这样使用WAITFOR是很好的,还是对于未来可能出现的一些问题来说是一个DB架构问题?
发布于 2012-02-10 15:33:15
这是一个非常危险的想法,数据库已经有足够的工具允许您同时插入和更新记录。您可以使用事务和提示来降低死锁风险。不正确的索引通常会导致大量的死锁。
在SQL proc中实现自旋锁通常会出错。
我在博客上介绍了一些你以前可以用到的模式:http://samsaffron.com/archive/2008/08/27/Deadlocked+
https://stackoverflow.com/questions/9223713
复制相似问题