【译】SQL Server误区30日谈-Day2-DBCC CHECKDB会导致阻塞
本系列文章是我在sqlskill.com的PAUL的博客看到的,很多误区都比较具有典型性和代表性,原文来自T-SQL Tuesday #11: Misconceptions about.... EVERYTHING!!,经过我们团队的翻译和整理发布在AgileSharp上。希望对大家有所帮助。
误区 #2: DBCC CHECKDB会引起阻塞,因为这个命令默认会加锁
这是错误的!
在SQL Server 7.0以及之前的版本中,DBCC CHECKDB命令的本质是C语言实现的一个不断嵌套循环的代码并对表加表锁(循环嵌套算法时间复杂度是嵌套次数的N次方,作为程序员的你懂得),这种方式并不和谐,并且…..
在SQL Server 2000时代,一个叫Steve Lindell的哥们(现在仍然在SQL Server Team)使用分析事务日志的方法来检查数据库的一致性的方式重写了DBCC CHECKDB命令。DBCC CHECKDB会阻止截断日志。当将日志从头读到尾时,在事务日志内部进行了某种Recovery操作,这实际上是另一种全新的实现Recovery的代码,但是仅限于CHECKDB命令内部。但这种方式依然存在问题,比如这个命令存在检查失败的可能性,如果检查失败,你还需要重新执行它看是否还会出现同样的错误。并且有时候,这个命令还会使用SCH_S锁,索然这个锁仅仅阻塞表扫描和表构架的改变,但通过日志来检查一致性的代码也并不是尽善尽美,并且…..
在SQL Server 2005时代,一个叫Paul Randal的家伙(译者:也就是本文作者)再次重写了DBCC CHECKDB命令。这次使用数据库快照来检查一致性(因为数据库快照会提供在数据库某一特定时间点的一致性视图),因此不再有事务日志的分析代码,不再有任何的锁--因为访问数据库快照不需要对原数据库加任何的锁,缓冲池会自动处理可能出现的资源争用。
如果想了解更多内幕消息,你可以阅读下面的文章:
CHECKDB From Every Angle: Complete description of all CHECKDB stages
CHECKDB From Every Angle: Why would CHECKDB run out of space?
Database snapshots - when things go wrong
Issues around DBCC CHECKDB and the use of hidden database snapshots
Do transactions rollback when DBCC CHECKDB runs?
Diskeeper 10 Intelliwrite corruption bug
现在,在任何SQL Server版本中,如果你依然使用WITH TABLOCK提示,那将会产生表锁来保证事务的一致性。但我不推荐这种方式。因为这种方式不仅需要更长的时间,还将会尝试对数据库加排他锁,但已经活动在数据库的连接有可能导致这种方式失败。
在SQL Server 2000中,这个命令阻止事务日志截断将会导致日志不正常增长的相关问题,但对于SQL Server 2005来说,这个命令就会导致快照相关的问题(具体请看上面的链接)。
但是在默认情况下,自从SQL SERVER 2000之后,DBCC CHECKDB不会再产生阻塞。
转载于:https://www.cnblogs.com/CareySon/archive/2012/10/22/2733484.html
【译】SQL Server误区30日谈-Day2-DBCC CHECKDB会导致阻塞相关推荐
- 【译】SQL Server误区30日谈-Day1-正在运行的事务在服务器故障转移后继续执行
本系列文章是我在sqlskill.com的PAUL的博客看到的,很多误区都比较具有典型性和代表性,原文来自T-SQL Tuesday #11: Misconceptions about.... EVE ...
- 【译】SQL Server误区30日谈-Day7-一个实例多个镜像和日志传送延迟
本系列文章是我在sqlskill.com的PAUL的博客看到的,很多误区都比较具有典型性和代表性,原文来自T-SQL Tuesday #11: Misconceptions about.... EVE ...
- 【译】SQL Server误区30日谈-Day8-有关对索引进行在线操作的误区
本系列文章是我在sqlskill.com的PAUL的博客看到的,很多误区都比较具有典型性和代表性,原文来自T-SQL Tuesday #11: Misconceptions about.... EVE ...
- SQL Server误区30日谈-Day21-数据损坏可以通过重启SQL Server来修复
本系列文章是我在sqlskill.com的PAUL的博客看到的,很多误区都比较具有典型性和代表性,原文来自T-SQL Tuesday #11: Misconceptions about.... EVE ...
- SQL Server误区30日谈-Day26-SQL Server中存在真正的“事务嵌套”
本系列文章是我在sqlskill.com的PAUL的博客看到的,很多误区都比较具有典型性和代表性,原文来自T-SQL Tuesday #11: Misconceptions about.... EVE ...
- SQL Server误区30日谈-Day27-使用BACKUP ... WITH CHECKSUM可以替代DBCC CheckDB
本系列文章是我在sqlskill.com的PAUL的博客看到的,很多误区都比较具有典型性和代表性,原文来自T-SQL Tuesday #11: Misconceptions about.... EVE ...
- 误区30日谈16-20
--17 a)页校验和(Page CheckSum)在从 SQL Server 2000或升级上来之后自动开启 --答案: 错误 --解释:SQL SERVER 2005 后的数据库默认使用 CHEC ...
- 误区30日谈21-24
--误区#21: 数据库损坏可以通过重启 SQL Server或是Windows, 或是附加和分离数据库解决 --答案:错误 --解释:数据库损毁无任何操作可修复,但可以通过某些机制来修复页损坏 (还 ...
- SQL Pass北京举办1周年活动(本次活动特别邀请到了来自微软的SQL Server大师何雷谈数据库职业规划)...
地点:北京微软(中国)有限公司[望京利星行],三层308室 时间:2013年 12 月28日 13:30-16:30 SQL PASS 北京QQ群号:2435349 新浪微群地址:http://q.w ...
最新文章
- Ubuntu中Atom编辑器显示中文乱码的处理方法
- FPGA转载文章目录
- Mozilla:火狐操作系统是巨大而艰难的一步“
- caffe源码分析:softmax_layer.cpp softmax_loss_layer.cpp
- u-boot的linux内核映像加载,基于U_Boot的Linux内核映像加载与引导功能实现.pdf
- springcloud-eureka简单实现
- vue项目中报常见错误
- Error:(199) undefined reference to `__android_log_print'
- Error:Cannot read packageName from AndroidManifest.xml
- 《Kotlin从零到精通Android开发》面世啦
- 请问王菲的<流年>歌词的含义
- ASP实现倒计时功能
- 如何解决python中文问题_布同:如何解决Python中文问题(总结了多位前人经验,初学者必看)...
- ES2015 模板字符串与字符串扩展方法
- YOLOV4-模型集成-pytorch
- android gallary demo
- java sbt_sbt使用详解
- KEPWare使用中的遇到的问题
- Axure利用动态面板做页面滚动原型图
- vue 文件上传组件封装
热门文章
- 这份思科设备命令大全火了~
- 分布式系统架构与云原生—阿里云《云原生架构白皮书》导读
- 云原生生态周报 Vol. 14 | K8s CVE 修复指南
- linux常见故障处理,[转载]Linux常见操作和故障处理汇总
- linux系统编译安装mysql_Linux下编译安装MySQL
- apache iotdb_Apache-IoTDB
- dva处理_umi项目中dvaeffects异常统一处理
- python字典内存分析_(一)Python入门-3序列:18字典-核心底层原理-内存分析-查找值对象过程...
- 【AI有识境】如何掌握好图像分割算法?值得你看的技术综述
- 【杂谈】GitHub上有哪些好用的爬虫(从Google百度,腾讯视频抖音,豆瓣知乎到不可描述)