最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

SQL Server 2014 SP1 的 NOLOCK 指令中断

  • 2016-06-01
  • 本文字数:765 字

    阅读完需:约 3 分钟

在针对 SQL Server 2014 SP1 的 Cumulative Update #6 更新中,NOLOCK 指令中断。因此,依赖 NOLOCK 指令的数据库可能会意外地经历阻塞或是死锁。根据 SQL Server Release Services 博客最新更新的一篇文章,具体的情景是这样的:

在默认的基于锁的隔离级别或更高的隔离级别下,执行并行的 SELECT (…) INTO Table FROM
SourceTable 语句,特别当使用 NOLOCK 提示时。在这种情况下其他试图访问 SourceTable 的查询将阻塞。

当一个事务持有对象的排他锁(例如进行中的表更新),另外一个事务正在执行并行的 SELECT (…) FROM
SourceTable,并使用 NOLOCK 提示。在这种情况下,尝试访问 SourceTable 的 SELECT 查询将被阻塞。

根据 Microsoft 发布团队的成员 Pedro Lopes 所说,这个错误不会影响使用 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 的代码。

早在推出行级版本(row level versioning),又称快照隔离之前,NOLOCK 提示就经常需要避免阻塞和死锁。然而,使用它会有一些风险。通过设计,运行NOLOCK 的查询可以读取在事务中改变的数据。这代表着决策可以基于最终回滚的事务。同样,决策也可以基于局部更新,例如使用一个记录的新版本和另一个相关记录的旧版本。

由于这些原因,一般不赞成在新的数据库中使用NOLOCK(和READ UNCOMMITTED)。然而,我们不能简单地将现有的数据库转移到行级版本。虽然它可以在不发生脏读的情况下解决阻塞问题,但是它还是需要增加tempdb 使用的成本。

Brent Ozar Unlimited 提供了一款通知服务,当问题解决的时候通知所有 DBA。你可以在 sqlserverupdates.com 报名。

查看英文原文 NOLOCK is Broken in SQL Server 2014 SP1


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-06-01 19:001204
用户头像

发布了 218 篇内容, 共 64.9 次阅读, 收获喜欢 75 次。

关注

评论

发布
暂无评论
发现更多内容

瞰见 | 美股新贵Confluent背后的卡夫卡,不是那个魔幻小说家

OpenTEKr

狄安瞰源

seata分布式事务TCC模式介绍及推荐实践

恒生LIGHT云社区

分布式 分布式事务 seata TCC

61 K8S之日志系统部署

穿过生命散发芬芳

k8s 28天写作 12月日更

Hoo虎符研究院 | 币海寻珠最新一期的DAO生态

区块链前沿News

DAO Hoo 虎符交易所 虎符研究院

祝大家元旦快乐,分享一些知识演讲

石云升

28天写作 12月日更

瞰见|从电厂螺蛳里看 Elastic 与亚马逊云的恩怨情仇

OpenTEKr

狄安瞰源

建木持续集成平台v2.1.1发布

Jianmu

DevOps CI/CD 开源软件

LabVIEW图像分割算法(基础篇—6)

不脱发的程序猿

机器视觉 图像处理 LabVIEW 图像分割算法

.NET6新东西--Logging Source Generator

喵叔

28天写作 12月日更

皮皮APP x 武汉市社会心理服务指导中心 联合开展社交讲座

联营汇聚

最好的 6 个免费天气 API 接口对比测评

蒋川

API 天气api

关于内核堆溢出漏洞的分析

网络安全学海

黑客 网络安全 信息安全 安全漏洞 渗透测试·

元宇宙很好,但VR开发者不准备停留在这里

脑极体

瞰见|即将上市的云明星 HashiCorp 走过的开源之路

OpenTEKr

开源 狄安瞰源

KubeEdge 王泽锋:只有代码没有生命力,凝聚开发者的社区才能活力无限Vol.8

OpenTEKr

大话开源

一个cpp协程库的前世今生(三)cocpp的核心框架结构

SkyFire

c++ cocpp

『征文精选』ShardingSphere-Proxy:Base 事务基于 Seata 验证

SphereEx

数据库 架构 开源社区 ShardingSphere SphereEx

盘点 2021|一个 SAP 成都研究院开发工程师的2021年度总结:既没有厚积,也未能薄发

Jerry Wang

程序员 28天写作 12月日更 盘点2021 盘点 2021

向未来飞驰:武汉推开了AI产业化和产业AI化的三重门

脑极体

VMware 任道远:中国的开源生态还处在萌芽发展的青春期,需要多元力量和全球化协作 I OpenTEKr 大话开源 Vol.9

OpenTEKr

大话开源

一个cpp协程库的前世今生(四)协程上下文ctx

SkyFire

c++ cocpp

回顾 2021,拥抱 2022~

阿策小和尚

盘点2021

一个cpp协程库的前世今生(五)协程执行环境env

SkyFire

c++ cocpp

CentOS 停服,龙蜥社区已上线解决方案专区

OpenAnolis小助手

centos 国产操作系统 龙蜥社区

2022 让我们登上更大的舞台

坚果

28天写作 12月日更 2021年终总结 盘点 2021

Postman 使用教程 - 手把手教你 API 接口测试

蒋川

Postman 接口测试

如何打造一个云原生背景下的可观测平台?

淡泊明志、宁静致远

Java 数据持久化系列之 HikariCP (一)

程序员历小冰

持久化 HikariCP 28天写作 12月日更

如何将List<Integer>转换为int[]数组

liuzhen007

Java 28天写作 12月日更

当MySQL执行XA事务时遭遇崩溃,且看华为云如何保障数据一致性

华为云开发者联盟

MySQL 华为云

五天玩转EMAS Serverless训练营

移动研发平台EMAS

阿里云 #Serverless #EMAS

SQL Server 2014 SP1的NOLOCK指令中断_DevOps & 平台工程_Jonathan Allen_InfoQ精选文章