我正在尝试将SQL Server表用作消息队列。一个进程将批量插入到表中。第二个是查询表,并在处理行之后删除行。
我的问题是:如果inserts和select/delete事务生成行级锁,我如何最好地避免两个进程之间的锁定问题?
发布于 2017-09-14 23:28:33
我会调查sp_getapplock和sp_releaseapplock。然后,两个进程都会尝试获取同一指定@Resource上的锁。
基本示例:
DECLARE @LockResult int = NULL
;
BEGIN TRAN MyTransaction
-- Obtain Lock
EXEC @LockResult = sp_getapplock
@Resource = 'MyResource',
@LockMode = 'Exclusive',
@LockTimeout = 10000
;
IF @LockResult IN (0, 1)
BEGIN
-- Your process
EXEC sp_releaseapplock @Resource = 'MyResource'
COMMIT TRAN MyTransaction
END
ELSE
-- Handle failure to obtain lock
;https://stackoverflow.com/questions/46222536
复制相似问题