NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:001206
用户头像

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

关注

评论

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

查找——顺序表的查找和有序表的查找

乔乔

7月月更

iOS 中的 Protocol

NewBoy

ios 前端 移动端 iOS 知识体系 7月月更

Ceph分布式存储初步认识(一)

Lansonli

私有云 Ceph 云存储 7月月更

新星计划Day5【数据结构与算法】 链表

京与旧铺

7月月更

小程序容器对工业互联网平台建设的加速的体现

Geek_99967b

小程序

分布式——Maven多模块管理

Java学术趴

7月月更

redis安装

想要飞的猪

企业级容器安全风险与最佳实践

明亮安全观

网络安全 安全架构 容器安全

Qt中 connect的多种方式

小肉球

qt 7月月更

《高绩效教练》:如何用提问激发潜能?

郭明

读书笔记

读书笔记之数据密集型应用的可靠性

宇宙之一粟

读书笔记 7月月更

3000字11张图硬核科普:什么是边缘计算?与云计算有什么联系和区别?

wljslmz

云计算 边缘计算 7月月更

shell脚本定时备份mysql数据库

乌龟哥哥

7月月更

Ark UI 中的问题汇总【系列 2】

坚果

HarmonyOS OpenHarmony Open Harmony 7月月更

【Docker 那些事儿】关于Namespace隔离机制的奥秘

Albert Edison

Docker Kubernetes 容器 云原生 7月月更

【萌新解题】两数之和

面试官问

LeetCode 哈希表 两数之和

到底应不应该使用 lombok

HoneyMoose

OAI L3与L2接口分析

柒号华仔

5G 7月月更

解读《深入理解计算机系统(CSAPP)》第8章异常控制流

小明Java问道之路

操作系统 异常 csapp 异常机制 7月月更

zookeeper-认识zookeeper

zarmnosaj

7月月更

jQuery

Jason199

jquery js 7月月更

飙车资深老教练-手撸一个EventBus

芝麻粒儿

android EventBus 7月月更

接口测试进阶接口脚本使用—apipost(预/后执行脚本)

Xd

接口测试

斐波拉契数最小步数与合法括号序列判断

未见花闻

7月月更

密码密钥硬编码检查

Tom(⊙o⊙)

密码 软件安全 信息泄露 静态代码检查 密钥管理

记一次uniapp的经历

是乃德也是Ned

uni-app 7月月更

深入浅出 eBPF|你要了解的 7 个核心问题

阿里巴巴云原生

阿里云 云原生 k8s ebpf

LeetCode第二题,裂开了..

为自己带盐

LeetCode 7月月更

自定义spring boot starter三部曲之一:准备工作

程序员欣宸

spring springboot 7月月更

浅入浅出Mybatis(二)

ES_her0

7月月更

重温算法之颜色分类

自由

算法刷题 7月月更

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