Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Sql Server 2012上的队列竞争条件_Sql Server_Race Condition - Fatal编程技术网

Sql server Sql Server 2012上的队列竞争条件

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,@

我有一个流程(tableProcess)UI,多人将在其中进行分析

用户工作流:

1-用户访问执行SP的流程UI,以返回可用的流程数并打开最近的一个 我正在使用

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和索引编辑了我的任务。谢谢