代码之家  ›  专栏  ›  技术社区  ›  johnc

记录写入锁定在可重复读取上

  •  0
  • johnc  · 技术社区  · 14 年前

    我有一个sql server查询(使用llbl orm,如果这对问题很重要的话)正在对一组相关表执行一个大的获取。

    此查询在隔离级别为可重复读取的事务中执行,并由查询主表中的两个“state”列筛选。

    被“写锁定”的记录是只与主表中的筛选器匹配的记录,还是在提取完成之前有效地写锁定所有记录?我猜在事务处理过程中,需要使用后者来确保没有新记录添加到结果集中。

    1 回复  |  直到 14 年前
        1
  •  1
  •   johnc    14 年前

    以确保没有新记录添加到 事务处理期间的结果集

    这需要可序列化的隔离级别。repeatable read only确保读取的行在事务中稍后能够再次读取,但不会阻止并发事务插入 新的 行和那些新行在insert提交后将在原始事务中可见。在serializable read下,锁将扩展到范围,因此没有新记录 满足过滤器的 将会出现。根据表架构(可用索引),限制 可以 扩展到整个表。

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