來自:http://sankarreddy.com/2010/03/transaction-log-block-checksum/
閱讀下文之前可以先看這篇文章:再談SQL Server中日志的的作用
從SQL2005開始,checksum校驗(yàn)被增加為頁面校驗(yàn)的一個(gè)選項(xiàng),最廣為人知的兩個(gè)checksum選項(xiàng)就是備份時(shí)候的checksum選項(xiàng)和頁面校驗(yàn)checksum選項(xiàng)
另外一個(gè)比較少人知道的選項(xiàng)就是log block checksum
什么是log block?
Log Block在宋沄劍寫的文章里已經(jīng)介紹的很清楚了
Log Block是日志寫入持久化存儲(chǔ)的最小單位,Log Block的大小從512字節(jié)到60K不等,這取決于事務(wù)的大小,
那些在內(nèi)存還未被寫入持久化存儲(chǔ)的Log Block也就是所謂的In-Flight日志。以下兩個(gè)因素決定Log Block的大小:
事務(wù)提交或回滾 Log Block滿60K會(huì)強(qiáng)制Flush到持久化存儲(chǔ),以保證WAL 因此當(dāng)一個(gè)事務(wù)很大時(shí)(比如說大面積update),
每60K就會(huì)成為一個(gè)Log Block寫入持久化存儲(chǔ)。而對(duì)于很多小事務(wù),提交或回滾就會(huì)成為一個(gè)Block寫入持久化存儲(chǔ),因此根據(jù)事務(wù)的大小,
LOG Block的大小也會(huì)不同。
大家知道page checksum就是校驗(yàn)寫入磁盤的頁面,而log block checksum其實(shí)就是校驗(yàn)寫入磁盤的log block
因?yàn)楫?dāng)log block寫入磁盤的時(shí)候也有可能損壞的,所以也需要校驗(yàn),本人覺得log block checksum校驗(yàn)的重要性不亞于頁面校驗(yàn)
因?yàn)镾QLSERVER靠日志來保證事務(wù)一致性,如果日志損壞了,還如何靠這些日志進(jìn)行redo,undo log??
我如何打開log block checksum這個(gè)選項(xiàng)?
頁面checksum可以使用
1 ALTER DATABASE xx PAGE_VERIFY CHECKSUM
Log block CHECKSUM選項(xiàng)會(huì)在當(dāng)頁面校驗(yàn)選項(xiàng)被設(shè)置為checksum的時(shí)候自動(dòng)開啟,即當(dāng)執(zhí)行上面那條語句的時(shí)候SQLSERVER已經(jīng)
幫您自動(dòng)開啟了log block checksum。注意:當(dāng)開啟過頁面校驗(yàn)選項(xiàng)被設(shè)置為checksum之后
后來又轉(zhuǎn)回頁面校驗(yàn)選項(xiàng)“TORN_PAGE_DETECTION”時(shí)候并不會(huì)影響log block checksum
log block CHECKSUM的工作方式
當(dāng)SQLSERVER提交一個(gè)事務(wù)并且發(fā)出一個(gè)事務(wù)日志寫,在log block寫入磁盤之前,SQLSERVER就是計(jì)算出這個(gè)log block的checksum值
并附加在log block的頭部,實(shí)際上這個(gè)結(jié)構(gòu)跟數(shù)據(jù)頁面非常相似。當(dāng)在備份和還原(還有其他的活動(dòng))期間讀取事務(wù)日志的時(shí)候,checksum值
就會(huì)被重新計(jì)算并且檢查先前寫入到log block頭部的那個(gè)checksum值
大家可以參考一下頁面checksum:
SQL 2005中的checksum功能http://blogs.msdn.com/b/apgcdsd/archive/2012/04/09/sql-2005-checksum.aspx
log block CHECKSUM有什么幫助?
如果存儲(chǔ)在log block頭部中的checksum值跟在讀取log block時(shí)用相同的方法再計(jì)算一次的checksum值不匹配
那么說明IO子系統(tǒng)已經(jīng)對(duì)您的數(shù)據(jù)造成一定的破壞。這個(gè)時(shí)候你應(yīng)該馬上檢查IO子系統(tǒng)找出問題的根源
TSQL里面的checksum函數(shù)、頁面checksum、備份checksum、log block checksum是使用相同的算法嗎?
答案是:NO
TSQL里的CHECKSUM 函數(shù)算法是不同于PAGE/BACKUP/Log Block CHECKSUM的,
PAGE/BACKUP/Log Block CHECKSUM使用簡(jiǎn)單和更有效的算法相比于TSQL的checksum函數(shù)
如有不對(duì)的地方,歡迎大家拍磚o(∩_∩)o
新聞熱點(diǎn)
疑難解答
圖片精選