问题标签 [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.

0 投票
1 回答
869 浏览

linq-to-sql - 在 LINQ-To-SQL 中,我应该使用 NOLOCK 来提高性能吗?

我们的 DBA 向我们提供了我们的 LINQ 查询正在数据库上创建数千个锁的信息。我们团队的一位开发人员挖掘了这个 Hanselman 帖子作为我们问题的可能解决方案:

http://www.hanselman.com/blog/GettingLINQToSQLAndLINQToEntitiesToUseNOLOCK.aspx

Scott 在 LINQ 中提供了 3 种方式来设置 NOLOCK。1) TransactionScope (首选), 2) SPROCS, 3) context.ExecuteCommand

我们是一个 99% 读取率、1% 写入率的新闻网站,因此我们的主要关注点是检索速度。对于我们所有的 LINQ-TO-SQL 查询来说,NOLOCK是一个好的策略吗?

我试图理解的是为什么使用 NOLOCK 是或不是一个好主意。肯定有很多人有着相同的目标:很多快速阅读,很少甚至没有更新。如果 NOLOCK 是显而易见的答案,那么为什么它不是默认值呢?为什么我不能在上下文中将其设为默认值,而不必在每个数据调用中都设置它?

NOLOCK 真的是许多快速阅读、很少更新网站的最佳选择吗?

更新:在 SQL Server 2005 及更高版本中,快照隔离是否比 NOLOCK 更好? 我刚刚发现这个 http://msdn.microsoft.com/en-us/library/ms179599.aspx

其中包括READ COMMITTED SNAPSHOT。这可以防止写块,但不返回脏数据?是否应该在 NOLOCK 上 90% 的时间使用它?

更新 2:困扰我的是 DRY

最困扰我的部分是,为了实现无锁或快照模式,我必须在每个 LINQ-to-SQL 查询方法上更改它(更新中使用的方法除外)。这闻起来像是对 DRY 的重大违反。

0 投票
3 回答
5782 浏览

performance - 使用 WITH(NOLOCK) 提高性能

我见过开发人员在查询中使用 WITH(nolock),它有什么缺点吗?另外,查询的默认执行模式是什么?我的数据库没有任何索引。

有没有其他方法可以提高数据库选择语句的性能?

0 投票
1 回答
7244 浏览

sql-server-2008 - 使用临时表和选择语句的 SQL 2008 上的 NOLOCK 问题

我正在使用 SQL 2008,并且在大多数情况下运行存储过程时都会遇到错误。有错误是:could not continue scan with nolock due to data movement。我已经在网上查找了这个,似乎大多数人在更新他们的 SQL 版本或进行更新/删除时都会得到这个。我也不做。此外,解决方案似乎是删除 NOLOCK 但我没有使用 NOLOCK(除非它是 SQL Server 2008 中的默认设置)。我也试过插入SET TRANSACTION ISOLATION LEVEL READ uncommitted,但它没有做任何改变。

我的存储过程包括获取参数、创建临时表、仅使用 SELECT 语句填充表,然后从表中获取信息。

有谁知道出了什么问题?

0 投票
1 回答
1103 浏览

entity-framework - Nolock 作为 EF4 的每个请求创建一个 ObjectContext 的默认设置

此代码是否有任何副作用:

现在“db”实例将运行 ReadUncommited 模式?

0 投票
1 回答
4139 浏览

azure - 在 SQL Azure 中支持 nolock

有谁知道为什么 SQL Azure 不支持with nolockSQL 语句。Microsoft 是否有计划在未来支持此功能?

0 投票
2 回答
362 浏览

sql - 高流量 SQL 表间歇性空输出参数

我的存储过程的输出参数出现间歇性空值。我想知道它是否与存储过程中的 NOLOCK 有关。它大部分时间都在工作,它会间歇性地失败。尤其是在高负载下。大多数情况下,它会返回您期望的“y”或“n”。

这是存储过程:

0 投票
1 回答
470 浏览

sql - 使用 nolock 和独占锁

所以,用 nolock 不会占用任何锁。它还会尊重优秀的锁吗?例如,如果我尝试使用 nolock 选择一行,而另一个进程已在该行上设置了独占锁,那么我使用 nolock 的选择会被阻止,还是会选择该行?

0 投票
1 回答
2975 浏览

c# - LINQ-To-SQL NOLOCK (NOT ReadUncommitted)

I've been searching for some time now in here and other places and can't find a good answer to why Linq-TO-SQL with NOLOCK is not possible..

Every time I search for how to apply the with(NOLOCK) hint to a Linq-To-SQL context (applied to 1 sql statement) people often answer to force a transaction (TransactionScope) with IsolationLevel set to ReadUncommitted. Well - they rarely tell this causes the connection to open an transaction (that I've also read somewhere must be ensured closed manually).

Using ReadUncommitted in my application as is, is really not that good. Right now I've got using context statements for the same connection within each other. Like:

With a total execution time of 1 sec and many users on the same time, changing the isolation level will cause the contexts to wait for each other to release a connection because all the connections in the connection pool is being used.

So one (of many reasons) for changing to "nolock" is to avoid deadlocks (right now we have 1 customer deadlock per day). The consequence of above is just another kind of deadlock and really doesn't solve my issue.

So what I know I could do is:

  1. Avoid nested usage of same connection
  2. Increase the connection pool size at the server

But my problem is:

  1. This is not possible within near future because of many lines of code re-factoring and it will conflict with the architecture (without even starting to comment whether this is good or bad)
  2. Even though this of course will work, this is what I would call "symptomatic treatment" - as I don't know how much the application will grow and if this is a reliable solution for the future (and then I might end up with a even worse situation with a lot more users being affected)

My thoughts are:

  1. Can it really be true that NoLock is not possible (for each statement without starting transactions)?
  2. If 1 is true - can it really be true no one other got this problem and solved it in a generic linq to sql modification?
  3. If 2 is true - why is this not a issue for others?
    1. Is there another workaround I havn't looked at maybe?
    2. Is the using of the same connection (nested) many times so bad practice that no-one has this issue?
0 投票
1 回答
584 浏览

c# - C# 中的事务并发

用户 1:

用户 2:

提交 user1 后。用户 2 的最后一条语句正在执行。

但我想执行这个用户 2 的最后一条语句而不是等待。我该怎么做。

请帮我。

0 投票
3 回答
3260 浏览

c# - C# T-SQL 语句包含“with(nolock)”错误

短的:

我的 C# 代码中的 SQL 语句不起作用。with(nolock)正在破坏代码。

详细的:

以下是我的错误和出现错误的代码。该代码应该连接到我的 SQL Server 数据库(连接代码工作正常)然后运行查询。此查询将获取所有具有“blah”uri 的事件的 IP 地址。问题似乎是我with(nolock)需要使用的命令。我必须使用它,因为它是所有 T-SQL 查询的组标准。

我用谷歌搜索了一段时间,但似乎没有什么适合我的问题,而且我发现的修复还没有奏效。对我的代码或链接的任何帮助将不胜感激。

错误:

System.Data.SqlClient.SqlException 在关键字“with”附近被捕获消息=语法不正确。如果此语句是公用表表达式、xmlnamespaces 子句或更改跟踪上下文子句,则前面的语句必须以分号结束。
Source=.Net SqlClient 数据提供程序 ErrorCode=-2146232060 Class=15 LineNumber=1 Number=319 Procedure="" Server= State=1

代码:

解决方案:

更改代码:

至: