问题标签 [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 - NOLOCK 提示会减慢操作吗?
我有一个关于使用的问题NOLOCK
。
我知道NOLOCK
提示并不总是最好的方法,但在某些情况下它非常有用。我并不是要养成一直使用它的坏习惯
我只是想了解它的确切行为。有一个不切实际的假设,即更新 id = 10 的记录的进程UPDATE table1 SET status = 2 WHERE id = 10
需要 30 秒才能更新。同时我执行SELECT * FROM table1 WITH NOLOCK where id = 10
即使我的第一个查询在记录上具有排他锁,我的 select 语句是否会读取该行,或者我的 select 查询会等到记录上没有任何锁,然后才允许读取?
我想知道使用NOLOCK
是否会导致延迟。
entity-framework - 为什么实体框架会忽略 TransactionScope(不使用 NOLOCK 添加)?
我错过了什么?
我正在尝试使用这样的 TransactionScope 使用 NOLOCK 阅读:
我希望看到 NOLOCK 添加到 SQL 查询(查看 SQL Profiler 和自定义 DbCommandInterceptor - 但它不存在......
更新:经过更多研究,我想知道是否最终使用了所选游标,只是没有 NOLOCK“提示”(特定于 SQL Server - 也特定于一个表),我发现了一些获取当前事务的代码和它似乎显示了正确选择的事务隔离(ReadUncommitted / Serializable 等)我仍然想测试它,但如果您有任何想法,请告诉我
java - Hibernate:在所有选择查询上强制“使用(NOLOCK)”提示,而不更改隔离级别
快速背景故事:
我在一个非常旧的应用程序上工作,该应用程序最近遇到了数据库锁定问题。该应用程序是用 Java 编写的并使用 Hibernate。我们发现的问题之一是事务的存活时间异常长,同时隔离级别也在 READ_COMMITED 和 READ_UNCOMMITED 之间频繁更改。虽然我们承认明确的解决方案是重构代码以使事务更小,但这将是一项我们目前无法完全承担的巨大工作(应用程序的大多数使用部分正在迁移到新系统,但此过程相对较慢)。
所以 - 因为我们对所有 Select 操作使用 READ_UNCOMMITED,而对其他所有操作使用 READ_COMMITED,一直在帮助我们的 DBA 确定了一种可能的解决方案,将隔离级别更改为全局 READ_COMMITED 并更改所有选择查询以包含提示 'with (诺克)'。他说,从功能上讲,检索数据的方式应该没有区别(因为我们现在使用脏读没有问题),同时为我们提供了不必频繁更改事务中的隔离级别的优势。我相信他的想法也来自我们最近收到的关于由隔离级别更改引起的数据库锁的报告。
那么-我们可以(如果可以,如何?)告诉hibernate在所有使用映射的java对象和HQL(甚至可能将现有的SQL传递给hibernate)自动生成的查询上添加一个'with(nolock)'提示,虽然这看起来像是在推动它:)))而不改变隔离级别?
最后附注:我们使用的是较旧版本的 hibernate,v3.5,现在升级不太可能,一些非常“聪明”的人决定在某个时候对其进行污染,插入一些他们自己的应用程序使用的代码。升级已尝试多次,但都失败了。
另外:我已经检查了很多相关的线程,总体思路似乎是:不要使用 nolock,更改隔离级别,如前所述,我们不打算这样做。
Edit1:由于该应用程序在过去 12 年中不断开发,有很多模块甚至没有被当前的开发团队浏览过,理想的解决方案是不需要识别每个模块使用持久化对象的 Java 代码。
Edit2:解决这个问题的一种可能方法 - 如果 Hibernate 允许它 - 将添加一种形式的拦截器,它在传递给数据库驱动程序之前接收格式化的 SQL 查询。然后我会自己添加提示,使用某种形式的正则表达式。
非常感谢您提前。
sql-server - T-SQL 为数据库中的所有表创建一个不加锁的视图
我正在寻找一个可以在我的服务器上运行的脚本来为我的数据库中的所有表创建没有锁定的视图。谢谢!
c# - 实体框架加入 NOLOCK
我正在使用实体框架将 SQL 函数转换为 C#,并且我正在转换的函数使用NOLOCK
正在连接的每个表(其中 10 个)上的提示。
因此,我决定为整个事务设置IsolationLevel
为。ReadUncommitted
目前,我正在像这样进行内部连接。
等等等等
会声明列表,例如
然后在我开始查询之前使用上下文填充它们会在这些表中产生不同的结果?即Table1
与context.table1.ToList()
? 如果是这样,我应该采用哪种实施方式?
sql - 在更新表格时,它正在冻结应用程序
我有一个每小时运行一次的更新查询。当它运行时,它会冻结系统,没有人可以工作。如何解决此问题
我的查询是:
我使用(nolock)仍然冻结。该怎么办
sql - 插入/更新后跟选择(nolock)是否可以产生具有相同数据的意外结果?
在存储过程中,
插入/更新后跟在同一记录上的选择(nolock)会产生意想不到的结果吗?
我总是得到(完整的)更新/插入的记录吗?
在此先感谢您的帮助!
sql-server - SQL SERVER,使用(TABLOCKX)选择查询会比使用(NOLOCK)更快,反之亦然?
我对上面的问题有疑问。我们在整个应用程序中使用 with nolock。在某些情况下,我需要更快地进行选择,无论效果如何。
所以select with(TABLOCKX)
会更快还是with(nolock)
?
sql-server - 如何确定在 SQL Server 的另一个事务中删除的记录?
我在 SQL Server 中有一个具有 ID 列的表,该表也设置为唯一聚集索引。
我需要确定给定 ID 中的哪些记录被锁定为在另一个事务中被删除。
如果我使用 READPAST,我只会得到那些未锁定的记录,但不能保证其余记录存在或正在另一个事务中删除。删除记录的 NOLOCK 不会返回任何数据。
我发现的唯一解决方法是在 READPAST 未检索到的那些 ID 上使用 NOWAIT 执行 SELECT 并检测锁定超时错误,但我需要分别为每条记录执行此操作。
在不使用系统表或存储过程的情况下,有没有更快的替代方案?
sql - 使用 NOLOCK 使用 HSQLDB 的语句的错误 SQL 语法
我正在使用HSQLDB并尝试运行包含NOLOCK
在查询中的 select 语句。
执行语句时,BadSqlGrammarException
会抛出 a。
有没有办法解决这个问题,因为该命令在 SQL Server 上运行得很好?