原文:SQLSERVER中的log block校验(译)

SQLSERVER中的log block校验(译)

来自:http://sankarreddy.com/2010/03/transaction-log-block-checksum/

阅读下文之前可以先看这篇文章:再谈SQL Server中日志的的作用

从SQL2005开始,checksum校验被增加为页面校验的一个选项,最广为人知的两个checksum选项就是备份时候的checksum选项和页面校验checksum选项

另外一个比较少人知道的选项就是log block checksum


什么是log block?

Log Block在宋沄剑写的文章里已经介绍的很清楚了

Log Block是日志写入持久化存储的最小单位,Log Block的大小从512字节到60K不等,这取决于事务的大小,

那些在内存还未被写入持久化存储的Log Block也就是所谓的In-Flight日志。以下两个因素决定Log Block的大小:

事务提交或回滚 Log Block满60K会强制Flush到持久化存储,以保证WAL     因此当一个事务很大时(比如说大面积update),

每60K就会成为一个Log Block写入持久化存储。而对于很多小事务,提交或回滚就会成为一个Block写入持久化存储,因此根据事务的大小,

LOG Block的大小也会不同。

大家知道page checksum就是校验写入磁盘的页面,而log block checksum其实就是校验写入磁盘的log block

因为当log block写入磁盘的时候也有可能损坏的,所以也需要校验,本人觉得log block checksum校验的重要性不亚于页面校验

因为SQLSERVER靠日志来保证事务一致性,如果日志损坏了,还如何靠这些日志进行redo,undo log??


我如何打开log block checksum这个选项?

页面checksum可以使用

 ALTER DATABASE xx PAGE_VERIFY CHECKSUM

Log block CHECKSUM选项会在当页面校验选项被设置为checksum的时候自动开启,即当执行上面那条语句的时候SQLSERVER已经

帮您自动开启了log block checksum。注意:当开启过页面校验选项被设置为checksum之后

后来又转回页面校验选项“TORN_PAGE_DETECTION”时候并不会影响log block checksum


log block CHECKSUM的工作方式

当SQLSERVER提交一个事务并且发出一个事务日志写,在log block写入磁盘之前,SQLSERVER就是计算出这个log block的checksum值

并附加在log block的头部,实际上这个结构跟数据页面非常相似。当在备份和还原(还有其他的活动)期间读取事务日志的时候,checksum值

就会被重新计算并且检查先前写入到log block头部的那个checksum值

大家可以参考一下页面checksum:

SQL 2005中的checksum功能
http://blogs.msdn.com/b/apgcdsd/archive/2012/04/09/sql-2005-checksum.aspx


log block CHECKSUM有什么帮助?

如果存储在log block头部中的checksum值跟在读取log block时用相同的方法再计算一次的checksum值不匹配

那么说明IO子系统已经对您的数据造成一定的破坏。这个时候你应该马上检查IO子系统找出问题的根源


TSQL里面的checksum函数、页面checksum、备份checksum、log block checksum是使用相同的算法吗?

答案是:NO

TSQL里的 CHECKSUM 函数算法是不同于PAGE/BACKUP/Log Block CHECKSUM的,

PAGE/BACKUP/Log Block CHECKSUM使用简单和更有效的算法相比于TSQL的checksum函数

如有不对的地方,欢迎大家拍砖o(∩_∩)o

SQLSERVER中的log block校验(译)的更多相关文章

  1. sqlserver 中数据导入到mysql中的方法以及注意事项

    数据导入从sql server 到mysql (将数据以文本格式从sqlserver中导出,注意编码格式,再将文本文件导入mysql中): 1.若从slqserver中导出的表中不包含中文采用: bc ...

  2. SQLServer中的数据库备份和还原

    更多资源:http://denghejun.github.io 备份 SQLServer中的备份,这里是T-SQL的用法,具体示例代码如下,使用也相对简单,其中TestDatabase 是指所需备份的 ...

  3. SQLSERVER中的假脱机spool

    SQLSERVER中的假脱机spool 我发现网上对于假脱机的解释都非常零散,究竟假脱机是什么? 这几天在家里研究了一下,收集了很多网上的资料 假脱机是中文的翻译,而英文的名字叫做 spool 在徐老 ...

  4. SQLSERVER中如何快速比较两张表的不一样

    SQLSERVER中如何快速比较两张表的不一样 不知不觉要写2014年的最后一篇博文了~ 一般来说,如何检测两张表的内容是否一致,体现在复制的时候发布端和订阅端的两端的数据上面 我这里罗列了一些如何从 ...

  5. Andoid java文件中的Log检查工具

    AndroidLogChecker 由于发布软件版本的时候我们需要把Log注释掉,此工具可以检查java类中的Log所在行以及是否已经注释. Github: https://github.com/cu ...

  6. Sqlserver中存储过程,触发器,自定义函数

    Sqlserver中存储过程,触发器,自定义函数: 1. 触发器:是针对数据库表或数据库的特殊存储过程,在某些行为发生的时候就会被激活 触发器的分类: DML触发器:发生在数据操作语言执行时触发执行的 ...

  7. 一旦rhel5.8造成只读文件系统ORA-00354: corrupt redo log block header

    一旦rhel5.8造成只读文件系统ORA-00354: corrupt redo log block header Wed Jun 03 03:31:24 CST 2015 Thread 1 adva ...

  8. SQLServer中间接实现函数索引或者Hash索引

    本文出处:http://www.cnblogs.com/wy123/p/6617700.html SQLServer中没有函数索引,在某些场景下查询的时候要根据字段的某一部分做查询或者经过某种计算之后 ...

  9. 如何使用T-SQL备份还原数据库及c#如何调用执行? C#中索引器的作用和实现。 jquery控制元素的隐藏和显示的几种方法。 localStorage、sessionStorage用法总结 在AspNetCore中扩展Log系列 - 介绍开源类库的使用(一) span<T>之高性能字符串操作实测

    如何使用T-SQL备份还原数据库及c#如何调用执行? 准备材料:Microsoft SQL Server一部.需要还原的bak文件一只 一.备份 数据库备份语句:user master backup ...

随机推荐

  1. SVN的命令解析(感觉不错就转了)

    本文链接: http://www.php-oa.com/2008/03/12/svnminglingzailinuxxiadeshiyong.html .将文件checkout到本地目录 svn ch ...

  2. ThreadSafeClientConnManager的20个例子

    Java Code Examples for org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager The following are ...

  3. Navicat工具破解

        Navicat提供多达 7 种语言供客户选择,被公认为全球最受欢迎的数据库前端用户介面工具.它可以用来对本机或远程的 MySQL.SQL Server.SQLite.Oracle 及 Post ...

  4. css样式hover图片闪烁问题

    主要是ie8及ie8以下版本浏览器会出现此问题, 问题核心是因为hover选择器没有缓存即将要替换的图片, 所以导致替换期间有一个极其短暂的空白期. 解决方案: 采用 background-posit ...

  5. Windows phone 8 学习笔记(7) 设备

    原文:Windows phone 8 学习笔记(7) 设备 本节主要涉及到 Windows phone 8 手机支持的各类设备,包括相机.设备状态,振动装置等.还有各类感应器,包括磁力计.加速度器和陀 ...

  6. Windows phone 8 学习笔记(1) 触控输入

    原文:Windows phone 8 学习笔记(1) 触控输入 Windows phone 8 的应用 与一般的Pc应用在输入方式上最大的不同就是:Windows phone 8主要依靠触控操作.因此 ...

  7. Spring Security 3.2.x与Spring 4.0.x的Maven依赖管理

    原文链接: Spring Security with Maven原文日期: 2013年04月24日翻译日期: 2014年06月29日翻译人员: 铁锚 1. 概述 本文通过实例为您介绍怎样使用 Mave ...

  8. 赤裸裸的splay平衡树

    HYSBZ1588 http://www.lydsy.com/JudgeOnline/problem.php?id=1588 给我们n天的营业额, 要求出每天的最小波动值,然后加起来.  当天最小波动 ...

  9. windows phone xaml文件中元素及属性(10)

    原文:windows phone xaml文件中元素及属性(10) Textblock xaml文件和隐藏文件 在设计界面的时候我们可以通过xaml中进行设计,这种设计是所见即所得的,很是方便,由于x ...

  10. QTP脚本--应用参数化来测试某个输入框

    以前一直觉得自己没有写代码的资质,太急于求成,以为一天就能写好几个功能,几千行代码,于是就没耐心了,没心情学下去了....但是最近发现其实写代码是一个漫长的过程,都是在修修改改中成长起来的.于是今天试 ...