Sql server SQL Server:如何避免在高并发性下对同一行进行多次更新
假设我有一个如下所示的库存阻塞机制Sql server SQL Server:如何避免在高并发性下对同一行进行多次更新,sql-server,azure,concurrency,sql-update,Sql Server,Azure,Concurrency,Sql Update,假设我有一个如下所示的库存阻塞机制 update inventory.items set status = 'BLOCKED' where id = (select top 1 id from inventory.items where status = 'AVAILABLE' order by id asc) 此代码在大多数工作负载中都能很好地工作。不过,我预计未来几天工作量将大幅增加。假设每秒有500次更新来自多
update inventory.items
set status = 'BLOCKED'
where id = (select top 1 id
from inventory.items
where status = 'AVAILABLE'
order by id asc)
此代码在大多数工作负载中都能很好地工作。不过,我预计未来几天工作量将大幅增加。假设每秒有500次更新来自多个web请求。我有一个ASP.NETCore2.2后端,提供数据访问。整个设置在一个Azure数据中心中
对于我的业务逻辑来说,一次以上的更新不会将同一行设置为BLOCKED
,这一点至关重要。这将导致超过1个订单试图阻止一个单一的库存,其中最后一个赢得,其他人饿死
在这种情况下,最佳做法是什么。我应该让SQL Server处理负载吗?或者是否有一种方法可以锁定所选项目,以便在更新发生之前没有其他人可以读取它
提前感谢您的帮助 您可以向子查询添加
SERIALIZABLE
提示:FROM inventory.items WITH(SERIALIZABLE)
。不要自己锁门。SS将始终释放锁。如果出现错误,代码可能会“永远”阻止记录。