标签: nolock

在数据仓库方案中使用WITH(NOLOCK)有任何不利之处

我有一个Kimball风格的DW(星型模型中的事实和维度 - 没有迟到的事实行或列,没有列的尺寸变化,除了过期作为类型2缓慢变化的尺寸的一部分),每日处理繁重以插入和更新行(新日期)以及每月和每日报告流程.事实表按日期划分,以便轻松滚动旧数据.

我理解WITH(NOLOCK)可以导致读取未提交的数据,但是,我也不希望创建任何会导致ETL进程失败或阻塞的锁.

在所有情况下,当我们从DW读取时,我们正在从事实表中读取一个不会改变的日期(事实表按日期划分)和维度表,这些表不会因为链接到的事实而改变属性.

那么 - 有什么缺点吗?- 可能在执行计划中或在SELECT相同表中并行运行的此类非常查询的操作中.

sql-server nolock sql-server-2005 data-warehouse

8
推荐指数
2
解决办法
3525
查看次数

在EF4中使用NOLOCK提示?

我们正在评估EF4,我的DBA说我们必须在所有SELECT语句中使用NOLOCK提示.所以我正在研究如何在使用EF4时实现这一点.

我已经阅读了关于如何在EF4中实现这一点的不同想法,但所有这些似乎都是一种解决方案而不是微软或EF4批准的.在使用LINQ-to-SQL/LINQ-to-Entities和EF4时,希望他们的SELECT语句包含NOLOCK提示的人的"官方Microsoft"响应是什么?

顺便说一下,我发现的绝对最好的信息就在这里,我鼓励每个对这个主题感兴趣的人阅读这个主题.

谢谢.

linq sql-server entity-framework nolock isolation-level

8
推荐指数
4
解决办法
1万
查看次数

MS SQL Server 2008"with(nolock)"等效于IBM DB2 9.7

在MS SQL Server 2008中,您可以这样写:

FROM EMPLOYEE as A with (nolock)
Run Code Online (Sandbox Code Playgroud)

DB2 9.7是否有等效的语法?谢谢

sql-server db2 nolock

7
推荐指数
1
解决办法
9785
查看次数

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会导致延误。

sql sql-server nolock locking query-optimization

6
推荐指数
1
解决办法
3152
查看次数

如何避免这两个SQL语句之间的死锁?

我有两个存储过程在不同的线程中运行,在SQL Server 2005上运行.一个过程将新行插入到一组表中,另一个过程从同一组表中删除旧数据.这些过程在表DLevelModel上遇到死锁.这是架构:

滚动条图像http://www.barramsoft.com/pub/images/DeadLock2.jpg

DFile:主键= DFileID
DLevel:主键= DLevelID,外键:DFileID
模型:主键= ModelID,外键:DFileID
ELement:主键= ElementID,外键1:DFileID,外键2:DLevelID

我已经隔离了导致死锁的确切的两个SQL语句(每个存储过程一个).我已经看到任何一个程序报告的死锁.我在两种情况下都使用top(1000),并且两个语句都在循环中执行,直到它们完成而没有剩下的行来删除/插入.

SQL语句1:

while (...)
begin
    delete top (1000) from DLevel where DFileID = @fileID1
    ...
end
Run Code Online (Sandbox Code Playgroud)

SQL语句2:

while (...)
begin
    insert into Element (ElementID, DFileID, LevelNum, ...)
       select top (1000) el.ElementID, el.DFileID, el.LevelNum, ...
       from   ElementLoader el with (nolock)
              left outer join Element e with (nolock)
                   on e.ElementID = el.ElementID
       where  el.DFileID = @fileID2
       and    e.ElementID …
Run Code Online (Sandbox Code Playgroud)

sql deadlock nolock sql-server-2005-express

5
推荐指数
1
解决办法
2762
查看次数

NOLOCK IN临时表

我在我的程序中声明了一个表,您可以在下面看到:

Declare @resultTable Table
(
  EmpId int,
  EmpStatusId int,
  CreatedDateTime datetime
)
Run Code Online (Sandbox Code Playgroud)

我执行删除功能:

Delete From ActualTable
Where Id = (Select EmpId from @resultTable with (nolock) where EmpStatusId = @tempId)
Run Code Online (Sandbox Code Playgroud)

我试图避免锁定在select语句中,以避免死锁,即使我读取脏数据.但是,不允许"with(nolock)".错误说:

关键字'with'附近的语法不正确.如果此语句是公用表表达式或xmlnamespaces子句,则必须以分号结束前一个语句.

有没有办法在临时表中应用NOLOCK?

sql nolock

5
推荐指数
1
解决办法
3262
查看次数

使用 Nolock 提示更新查询

我正在尝试在更新查询中添加 with(NOLOCK):

UPDATE pth_patchLookup with(nolock) SET ScanDateTime = Getdate() WHERE RegID = 312
Run Code Online (Sandbox Code Playgroud)

但我收到以下消息:

NoLock hint is supported only with Select statement and not with update, insert and delete.
Run Code Online (Sandbox Code Playgroud)

有什么方法可以在此更新查询中应用“NOLOCK”?

谢谢你的帮助

sql nolock sql-server-2008-r2

5
推荐指数
1
解决办法
3万
查看次数

dapper-extensions GetList()with(nolock)

有人知道with (nolock)在使用时是否可以告诉dapper追加connection.GetList<TView>()

我使用它作为我的CQRS模型中的R并且它运行良好但我现在担心我们正在做更多的重读,它将开始锁定表.如果可能的话,我宁愿不在混合中添加交易.

sql-server nolock dapper dapper-extensions

5
推荐指数
1
解决办法
1107
查看次数

WITH(NOLOCK) 的最佳替代品?

我正在 C#.Net 中创建一个自我项目,通过使用 3 层应用程序,我不想让我的 sql 语句具有事务性,这些语句用于多个存储过程,我一直在使用 WITH(NOLOCK)方法来查询在事务期间用于插入或更新的那些表,在 C# 方面我一直在使用 TransactionScope,但我最近读到不推荐使用 WITH(NOLOCK),因为它会导致幻像读取或使用脏的和不一致的数据。我的问题是,为了使用在事务期间插入或更新的数据,当涉及到选择时,事务操作方面的最佳方法是什么?无论是数据库端还是业务代码端。

.net sql-server nolock transactions

5
推荐指数
1
解决办法
3337
查看次数

子查询的 WTH (NOLOCK) 语法

我试图在报告查询中添加 with (nolock) ,运行时会锁定整个数据库,从而使其他用户无法使用该数据库。

我不知道在这种情况下如何使用:

-- this is just an example:
SELECT FIELDS FROM (SELECT * FROM ATABLE) AS SUB
Run Code Online (Sandbox Code Playgroud)

这给出了语法错误:

SELECT FIELDS FROM (SELECT * FROM ATABLE) WITH (NOLOCK) AS SUB
Run Code Online (Sandbox Code Playgroud)

WITH (NOLOCK)应该放在哪里?

我并不是说这是所有问题的解决方案,这只是我想要的一个测试。

谢谢!

sql-server nolock sql-server-2008-r2

5
推荐指数
1
解决办法
4415
查看次数