我们有一个复杂的存储过程,它首先执行INSERTS,然后在特定行中进行更新。理想情况下,在完成此请求后,如果用户2命中相同的SP,则必须发生一些SELECTS而不是UPDATES。 如果在执行第一次操作的同时有多个请求同时出现,那么我们自然会在该更新中遇到死锁。
我们正在考虑实现WAITFOR,以便SP在开始之前首先在全局临时表中设置一个标志,如果第二个请求到来,它会等待一段时间再试一次,这样在说了10秒后,它可以尝试再次,如果它看到更新完成,它可以完全跳过SELECT逻辑。这样我们觉得没有用户会遇到死锁,之后说5-10秒就会得到最终返回的结果。
对于未来可能的问题,是否正在使用WAITFOR这样的优秀或数据库架构问题?
答案 0 :(得分:0)
这是一个非常危险的想法,数据库已经有很多工具允许您同时插入和更新记录。您可以使用事务和提示来降低死锁风险。通常不正确的索引可能会导致大量死锁。
在SQL proc中实现自旋锁通常会出错。
我在博客中介绍了一段时间可以使用的模式:http://samsaffron.com/archive/2008/08/27/Deadlocked+