记录写入锁定在RepeatableRead上

时间:2010-08-26 00:40:27

标签: sql transactions locking

我有一个SQL Server查询(使用LLBL ORM,如果这对问题很重要),它在一组相关表上进行大量提取。

此查询正在具有可重复读取的隔离级别的事务中执行,并且正在由查询主表中的两个“状态”列进行过滤。

“写入锁定”的记录是仅与主表中的过滤器匹配的记录,还是在获取完成之前所有记录都会被有效写入锁定?我猜测后者将需要确保在事务期间没有新的记录添加到结果集中。

1 个答案:

答案 0 :(得分:1)

  

确保没有添加新记录   交易期间的结果集

这需要Serializable隔离级别。可重复只读确保读取的行将能够在事务中稍后再次读取,但不会阻止并发事务插入行,并且这些新行将在原始事务中可见,在它们由插入物提交之后。在Serializable Read下,锁定将扩展到范围,因此不会出现满足过滤器的新记录。根据表模式(可用索引),限制可以扩展到整个表。

您应该认真考虑在快照隔离下执行所有操作,这样可以解决几乎所有已知的异常情况,但资源上的代价更高,请参阅Row Versioning Resource Usage