0

我将描述我的问题以便于解释:

我有一个表,我的软件正在使用事务访问它(更新、插入)。

问题是我想在这个表中启用 DIRT READ。但我不能在我的 sql 语句中使用 with (nolock),因为我不能更改软源。所以我想在开始事务的sql进程中启用脏读。

它看到命令“SET ISOLATION LEVEL ...”和“WITH(NOLOCK)”在访问锁定表的语句中执行......这就是我试图避免的。我想在开始交易的语句中启用脏读...

提前致谢!

4

1 回答 1

1
  1. 更改写入的隔离级别没有意义,例如插入或更新。写入总是对他们更新的任何内容进行排他锁,期间。您可以做的是更改您的reads和 SELECT 语句的隔离级别。
  2. 永远不需要脏读。在 99% 的情况下,它们表明架构和查询设计错误,导致端到端扫描保证阻塞锁定的行。解决方案是正确更改架构,添加必要的索引以避免扫描。这不需要更改源。
  3. 对于确实无法避免争用且架构设计正确的极少数情况,答案绝不是启用脏读,而是转向快照隔离

    ALTER DATABASE ... SET ALLOW_SNAPSHOT_ISOLATION ON;
    ALTER DATABASE ... SET READ_COMMITTED_SNAPSHOT ON;

对于快照隔离引入的行版本控制开销可见的少数部署,他们有专业人员可以缓解问题。

于 2010-04-19T15:37:52.557 回答