本系列文章是我在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会导致阻塞相关推荐

  1. 【译】SQL Server误区30日谈-Day1-正在运行的事务在服务器故障转移后继续执行

    本系列文章是我在sqlskill.com的PAUL的博客看到的,很多误区都比较具有典型性和代表性,原文来自T-SQL Tuesday #11: Misconceptions about.... EVE ...

  2. 【译】SQL Server误区30日谈-Day7-一个实例多个镜像和日志传送延迟

    本系列文章是我在sqlskill.com的PAUL的博客看到的,很多误区都比较具有典型性和代表性,原文来自T-SQL Tuesday #11: Misconceptions about.... EVE ...

  3. 【译】SQL Server误区30日谈-Day8-有关对索引进行在线操作的误区

    本系列文章是我在sqlskill.com的PAUL的博客看到的,很多误区都比较具有典型性和代表性,原文来自T-SQL Tuesday #11: Misconceptions about.... EVE ...

  4. SQL Server误区30日谈-Day21-数据损坏可以通过重启SQL Server来修复

    本系列文章是我在sqlskill.com的PAUL的博客看到的,很多误区都比较具有典型性和代表性,原文来自T-SQL Tuesday #11: Misconceptions about.... EVE ...

  5. SQL Server误区30日谈-Day26-SQL Server中存在真正的“事务嵌套”

    本系列文章是我在sqlskill.com的PAUL的博客看到的,很多误区都比较具有典型性和代表性,原文来自T-SQL Tuesday #11: Misconceptions about.... EVE ...

  6. SQL Server误区30日谈-Day27-使用BACKUP ... WITH CHECKSUM可以替代DBCC CheckDB

    本系列文章是我在sqlskill.com的PAUL的博客看到的,很多误区都比较具有典型性和代表性,原文来自T-SQL Tuesday #11: Misconceptions about.... EVE ...

  7. 误区30日谈16-20

    --17 a)页校验和(Page CheckSum)在从 SQL Server 2000或升级上来之后自动开启 --答案: 错误 --解释:SQL SERVER 2005 后的数据库默认使用 CHEC ...

  8. 误区30日谈21-24

    --误区#21: 数据库损坏可以通过重启 SQL Server或是Windows, 或是附加和分离数据库解决 --答案:错误 --解释:数据库损毁无任何操作可修复,但可以通过某些机制来修复页损坏 (还 ...

  9. SQL Pass北京举办1周年活动(本次活动特别邀请到了来自微软的SQL Server大师何雷谈数据库职业规划)...

    地点:北京微软(中国)有限公司[望京利星行],三层308室 时间:2013年 12 月28日 13:30-16:30 SQL PASS 北京QQ群号:2435349 新浪微群地址:http://q.w ...

最新文章

  1. Ubuntu中Atom编辑器显示中文乱码的处理方法
  2. FPGA转载文章目录
  3. Mozilla:火狐操作系统是巨大而艰难的一步“
  4. caffe源码分析:softmax_layer.cpp softmax_loss_layer.cpp
  5. u-boot的linux内核映像加载,基于U_Boot的Linux内核映像加载与引导功能实现.pdf
  6. springcloud-eureka简单实现
  7. vue项目中报常见错误
  8. Error:(199) undefined reference to `__android_log_print'
  9. Error:Cannot read packageName from AndroidManifest.xml
  10. 《Kotlin从零到精通Android开发》面世啦
  11. 请问王菲的<流年>歌词的含义
  12. ASP实现倒计时功能
  13. 如何解决python中文问题_布同:如何解决Python中文问题(总结了多位前人经验,初学者必看)...
  14. ES2015 模板字符串与字符串扩展方法
  15. YOLOV4-模型集成-pytorch
  16. android gallary demo
  17. java sbt_sbt使用详解
  18. KEPWare使用中的遇到的问题
  19. Axure利用动态面板做页面滚动原型图
  20. vue 文件上传组件封装

热门文章

  1. 这份思科设备命令大全火了~
  2. 分布式系统架构与云原生—阿里云《云原生架构白皮书》导读
  3. 云原生生态周报 Vol. 14 | K8s CVE 修复指南
  4. linux常见故障处理,[转载]Linux常见操作和故障处理汇总
  5. linux系统编译安装mysql_Linux下编译安装MySQL
  6. apache iotdb_Apache-IoTDB
  7. dva处理_umi项目中dvaeffects异常统一处理
  8. python字典内存分析_(一)Python入门-3序列:18字典-核心底层原理-内存分析-查找值对象过程...
  9. 【AI有识境】如何掌握好图像分割算法?值得你看的技术综述
  10. 【杂谈】GitHub上有哪些好用的爬虫(从Google百度,腾讯视频抖音,豆瓣知乎到不可描述)