日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

【译】SQL Server误区30日谈-Day2-DBCC CHECKDB会导致阻塞

發(fā)布時(shí)間:2025/3/20 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【译】SQL Server误区30日谈-Day2-DBCC CHECKDB会导致阻塞 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

??? 本系列文章是我在sqlskill.com的PAUL的博客看到的,很多誤區(qū)都比較具有典型性和代表性,原文來自T-SQL Tuesday #11: Misconceptions about.... EVERYTHING!!,經(jīng)過我們團(tuán)隊(duì)的翻譯和整理發(fā)布在AgileSharp上。希望對(duì)大家有所幫助。

?

誤區(qū) #2: DBCC CHECKDB會(huì)引起阻塞,因?yàn)檫@個(gè)命令默認(rèn)會(huì)加鎖

這是錯(cuò)誤的!

??? 在SQL Server 7.0以及之前的版本中,DBCC CHECKDB命令的本質(zhì)是C語言實(shí)現(xiàn)的一個(gè)不斷嵌套循環(huán)的代碼并對(duì)表加表鎖(循環(huán)嵌套算法時(shí)間復(fù)雜度是嵌套次數(shù)的N次方,作為程序員的你懂得),這種方式并不和諧,并且…..

??? 在SQL Server 2000時(shí)代,一個(gè)叫Steve Lindell的哥們(現(xiàn)在仍然在SQL Server Team)使用分析事務(wù)日志的方法來檢查數(shù)據(jù)庫(kù)的一致性的方式重寫了DBCC CHECKDB命令。DBCC CHECKDB會(huì)阻止截?cái)嗳罩尽.?dāng)將日志從頭讀到尾時(shí),在事務(wù)日志內(nèi)部進(jìn)行了某種Recovery操作,這實(shí)際上是另一種全新的實(shí)現(xiàn)Recovery的代碼,但是僅限于CHECKDB命令內(nèi)部。但這種方式依然存在問題,比如這個(gè)命令存在檢查失敗的可能性,如果檢查失敗,你還需要重新執(zhí)行它看是否還會(huì)出現(xiàn)同樣的錯(cuò)誤。并且有時(shí)候,這個(gè)命令還會(huì)使用SCH_S鎖,索然這個(gè)鎖僅僅阻塞表掃描和表構(gòu)架的改變,但通過日志來檢查一致性的代碼也并不是盡善盡美,并且…..

??? 在SQL Server 2005時(shí)代,一個(gè)叫Paul Randal的家伙(譯者:也就是本文作者)再次重寫了DBCC CHECKDB命令。這次使用數(shù)據(jù)庫(kù)快照來檢查一致性(因?yàn)閿?shù)據(jù)庫(kù)快照會(huì)提供在數(shù)據(jù)庫(kù)某一特定時(shí)間點(diǎn)的一致性視圖),因此不再有事務(wù)日志的分析代碼,不再有任何的鎖--因?yàn)樵L問數(shù)據(jù)庫(kù)快照不需要對(duì)原數(shù)據(jù)庫(kù)加任何的鎖,緩沖池會(huì)自動(dòng)處理可能出現(xiàn)的資源爭(zhēng)用。

???

??? 如果想了解更多內(nèi)幕消息,你可以閱讀下面的文章:

  • 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

?

??? 現(xiàn)在,在任何SQL Server版本中,如果你依然使用WITH TABLOCK提示,那將會(huì)產(chǎn)生表鎖來保證事務(wù)的一致性。但我不推薦這種方式。因?yàn)檫@種方式不僅需要更長(zhǎng)的時(shí)間,還將會(huì)嘗試對(duì)數(shù)據(jù)庫(kù)加排他鎖,但已經(jīng)活動(dòng)在數(shù)據(jù)庫(kù)的連接有可能導(dǎo)致這種方式失敗。

??? 在SQL Server 2000中,這個(gè)命令阻止事務(wù)日志截?cái)鄬?huì)導(dǎo)致日志不正常增長(zhǎng)的相關(guān)問題,但對(duì)于SQL Server 2005來說,這個(gè)命令就會(huì)導(dǎo)致快照相關(guān)的問題(具體請(qǐng)看上面的鏈接)。

??? 但是在默認(rèn)情況下,自從SQL SERVER 2000之后,DBCC CHECKDB不會(huì)再產(chǎn)生阻塞。

轉(zhuǎn)載于:https://www.cnblogs.com/CareySon/archive/2012/10/22/2733484.html

總結(jié)

以上是生活随笔為你收集整理的【译】SQL Server误区30日谈-Day2-DBCC CHECKDB会导致阻塞的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。