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