问题标签 [nolock]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server-2008 - 当我使用 (NOLOCK) 复制表时,为什么 SQL Server 需要很长时间处理存储过程
我的数据库中有两个大表,对于测试,我已将表(使用 (NOLOCK) 从 online_table 选择 * 到 backup_table)复制到带有后缀 _backup 的同一个数据库中。在备份表上,我开始将 nvarchar(50) 列转换为日期时间格式。在他们之后,我设置了主键和一些索引。在开始复制、转换和设置索引之前,我将数据库备份设置为简单,然后在步骤返回完整备份模式之后。
问题是:在线表上的数据库非常慢。在两个表之间有连接的存储过程通常需要一分钟以上才能完成。通常他们在一秒钟或更短的时间内完成。在描述的步骤一小时后,存储过程的速度不再有问题。它们和以前一样工作,索引都很好,小于 1% 的碎片,我用 nolock 复制表,所以它应该对在线表没有影响。有人知道这个问题,也许有解决办法吗?或有其他方法来执行此步骤?
sql - 简单选择不返回所有行并且 sp_who 不返回任何块
我在一个只有少量行的表上运行一个简单的选择,并且它会永远运行。我发现如果我运行它会返回正常:
但是,如果我运行,它会永远挂起:
如果我运行sp_who
or sp_who2
,则没有人阻塞。为什么会发生这种情况,我该如何解决?
sql - 查询级别的 NOLOCK
我有一个查询来运行一个 SQL 服务器表,其中我不关心确切的计数。因此,我想为该查询指定 NOLOCK。但是,查询本身由多个子查询和多个连接组成;所以,把NOLOCK到处放是很脏的。
虽然,我可以为表设置事务级别“READ-UNCOMMITTED”,但这也会改变所有其他查询。我想更改该特定查询的事务级别,但没有在多个位置的查询中指定 NOLOCK。那可能吗?
mysql - 如何测试 MySql READ UNCOMMITTED 对 nolock 的使用
我正在使用以下查询:
该表有很多写操作和繁重的读操作。为了从读取操作中获得最小的效果,我想使用非锁定读取操作。在 MySql 中,它是通过“READ UNCOMMITTED”完成的(根据我阅读的内容)。
如何测试这段代码是否真的有效?
sql-server-2008 - rowversion 列的值何时更新?
如果我有一个带有 rowversion 列的表,它会按如下方式更新:
如果有人用 WITH(NOLOCK) 查询表会发生什么?查询结果是否有可能是“Bob”(旧值)和“EFGH”(新行版本)?
本质上,我要问的是 rowversion 什么时候真正得到更新?是否可以保证 rowversion 列在所有其他列都更新后总是会更新?
sql-server - dapper-extensions GetList() with (nolock)
有谁知道是否可以告诉 dapperwith (nolock)
在使用时追加connection.GetList<TView>()
?
我将它用作我的 CQRS 模型中的 R,它运行良好,但我担心现在我们正在做更多的阅读,它会开始锁定表。如果可能的话,我宁愿不将交易添加到组合中。
.net - WITH(NOLOCK) 的最佳替代方案?
我在 C#.Net 中制作一个自我项目,通过使用 3 层应用程序,我不想让我的 sql 语句具有事务性,这些语句用于多个存储过程,我一直在使用 WITH(NOLOCK)方法是为了查询那些在事务期间用于插入或更新的表,在 C# 端我一直在使用 TransactionScope,但我最近读到不推荐使用 WITH(NOLOCK),因为它会导致幻像读取或使用脏数据和不一致数据。我的问题是,为了使用在事务期间插入或更新的数据,当涉及到选择时,就事务操作而言,最好的方法是什么?无论是数据库端还是业务代码端。
sql-server-2008 - 如何在 SQL Server 中的表级别上应用锁定
我正在使用 SQL Server 2008 R2 版本,并希望在从表中选择数据时在表级别应用锁定。
由于应用 NO_LOCK 会导致 DIRTY READ 问题,因此希望在仅包含域数据而不包含事务数据的表上应用 NO_LOCK。即更改频率非常低的数据。
请建议任何在域表上应用 LOCK 的方法。
sql-server - 在我的情况下,With(NoLock) 提示是否危险?
我之前已经多次阅读和使用 with(nolock) 提示,但我对特定案例有疑问。
就我而言,我有一组引用和更新一个数据库的代码。
此代码旨在以单线程方式运行。几个月前,他们决定在不更改代码的情况下使其成为多线程。他们的做法是让每个不同的“代码处理器”管理不同的商店组。
例如,处理器 1 负责存储 1 到 20,处理器 2 负责存储 21 到 40,依此类推。
在我们开始陷入僵局之前,一切似乎都很好。死锁总是在页面上......如果锁只在行上,我们将永远不会出现死锁,因为来自一个处理器的数据永远不会与来自另一个处理器的数据发生冲突。基于这个理论,我决定在每个不需要锁定的选择上加上 With(Nolock) 提示(尚未投入生产)......这使我的死锁在我的实验室中消失了。
一切看起来都很好而且很漂亮,直到我的同事来找我这篇文章把我吓坏了......然后我读了那个......
在我的情况下使用 With(Nolock) 提示是否存在危险......处理器之间的数据永远不会发生冲突?
symfony - 如何在与 Doctrine2 和 SQL Server 的关联(加入)上执行 lockmode:none
我正在尝试使用 Doctrine2 将 With(nolock) 提示附加到我的查询中。我尝试使用,->setLockMode(LockMode::NONE)->getSQL();
但它没有按预期工作,它将 WITH(NOLOCK) 添加到FROM 子句中的 ( first ) 表中。我会解释:
预期的:
我真正得到的:
可能的解决方案:
但我不确定这样做是否with(nolock)
与使用READ_UNCOMMITTED
隔离级别相同。
编辑:使用发布的事务启动与在查询的每个表上执行with(nolock)TRANSACTION_READ_UNCOMMITTED
相同。