Sql server Sql Server 2012上的队列竞争条件
我有一个流程(tableProcess)UI,多人将在其中进行分析 用户工作流: 1-用户访问执行SP的流程UI,以返回可用的流程数并打开最近的一个 我正在使用Sql server Sql Server 2012上的队列竞争条件,sql-server,race-condition,Sql Server,Race Condition,我有一个流程(tableProcess)UI,多人将在其中进行分析 用户工作流: 1-用户访问执行SP的流程UI,以返回可用的流程数并打开最近的一个 我正在使用 FROM tableProcess AS process WITH (UPDLOCK, READPAST) 在同一SP中,我用当前日期更新所选行 2-用户确认验证/使流程无效的操作。 使用SP选择和更新流程 问题是我有时会把整个过程都锁上。有解决办法吗 sp代码段 SELECT TOP (1) @Column1,@Column2,@
FROM tableProcess AS process WITH (UPDLOCK, READPAST)
在同一SP中,我用当前日期更新所选行
2-用户确认验证/使流程无效的操作。
使用SP选择和更新流程
问题是我有时会把整个过程都锁上。有解决办法吗
sp代码段
SELECT TOP (1) @Column1,@Column2,@Column3
FROM tableProcess AS process WITH (UPDLOCK, READPAST)
WHERE (process.Date IS NULL)
ORDER BY process.AnalyseDate
BEGIN TRAN
UPDATE process
SET process.Date = GETDATE()
FROM tblProcess AS process
WHERE process.Column2 = @Column2;
COMMIT TRAN;
该表中有两个索引:
-Colunm1(pk)(唯一、群集)
-第2列(非唯一、非集群)包括
ROWLOCK
提示,使用SERIALIZABLE
,关闭锁升级(ALTER TABLE
),使用应用程序锁,启用和使用快照隔离。很难说其中哪一个适合您的用例。如果在将表视为队列时需要确保细粒度锁定和并发性,则必须非常小心选择标准和索引。那么,你的WHERE子句是什么,你的索引是什么?我用WHERE和索引编辑了我的任务。谢谢包括ROWLOCK
提示,使用SERIALIZABLE
,关闭锁升级(ALTER TABLE
),使用应用程序锁,启用和使用快照隔离。很难说其中哪一个适合您的用例。如果在将表视为队列时需要确保细粒度锁定和并发性,则必须非常小心选择标准和索引。那么,你的WHERE子句是什么,你的索引是什么?我用WHERE和索引编辑了我的任务。谢谢