在SQL Server 2014中使用内存中的表时遇到了很大的问题。
我知道SQL Server中没有readpast锁。但在某些情况下,它可能会导致性能下降。
假设一个表中有20条记录。每条记录都有一列LockStatus
,初始值为Wait
。
如果两个消费者想要挑选最多(10)个记录,会发生什么?
消费者获得前10条记录并将其状态更改为Locked
,当它正在使用它们时,第二个消费者尝试选择顶部(10)但它将被中止:
当前事务尝试更新已有的记录 此事务开始后更新。交易中止了。
使用readpast锁定,我们可以告诉消费者2选择第二个10条记录,而不是中止。