【发布时间】:2016-03-29 18:23:54
【问题描述】:
我有 15 个被规范化以包含记录的表,并且许多用户可能在这些表中插入/更新数据(没有两个用户可以同时更新相同的记录,这受到客户端实现的限制)。这 15 个表在存储过程中一一更新。 WITH(NOLOCK) 用于选择语句以避免读锁,因为某些用户可能同时查看数据。但有时在这些过程中这些选择语句中存在锁定。根据我过去的经验,我设置了这些 nolock 以避免阻塞。
我不确定某处是否缺少 WITH(NOLOCK) 或者这是其他问题。 Should I search for missing WITH(NOLOCK)?
or what other ways are there to avoid this locking?
NOLOCK 有什么限制?我只是在读取数据,我不在乎我是否读取已提交或未提交的数据。还有什么 可以采取措施消除这种阻塞吗?
【问题讨论】:
-
删除
NOLOCK并使用SET TRANSACTION ISOLATION LEVEL SNAPSHOT? -
但是现在删除这些 NOLOCK 是一项艰巨的任务。它们在 SP 中无处不在。并且会比较大的变化是重新测试的条款。有没有其他办法?
-
如果我使用 SET TRANSACTION ISOLATION LEVEL SNAPSHOT 而不更改 NOLOCK 语句。这行得通吗?
-
您能否发布一些包含导致锁定的无锁定的查询? NoLock 与将事务级别设置为 READ UNCOMMITTED 相同。这将为整个事务设置隔离级别。也许试一试?
标签: sql sql-server tsql