CHECKSUM 和 Tempdb

可能您有印象从 SQL Server2005 开始有一个选项开启在用户数据库上的 CHECKSUM 功能。更多细节参见 http://blogs.msdn.com/sqlserverstorageengine/archive/2006/06/29/Enabling-CHECKSUM-in-SQL2005.aspx .

事实上,在SQL Server2005中每个新建的数据库都是默认开启CHECKSUM功能,但从其他版本升级到SQL Server2005的数据库不会自动开启,需要开启时使用ALTER DATABASE命令。启用CHECKSUM是十分重要的,在查询的一部分需要读数据页或者运行DBCC CHECKDB命令式,它能使数据库检测到IO路径上的损坏状况(如磁盘故障)。美中不足的是,SQL Server不允许对tempdb启用CHECKSUM。即使我们在用户数据库上启用了CHECKSUM,由于磁盘问题导致的页损坏还是会通过tempdb的这个漏洞进入该用户数据库。以下描述了这样一个示例场景

  • 示例场景:

批量导入数据到一个临时表格然后再导入用户数据库。用户数据库启用了CHECKSUM,所以新页面写入磁盘的时候会计算CHECKSUM。但有没有不计算CHECKSUM的情况呢?如果因磁盘损坏而损坏的页面先进入tempdb再进入用户数据库时,SQL Server无法知道页面是否损坏,也不会检测这些进入用户数据库的页面。是的,当页面随后被读取时,SQL Server有可能检测出错误也有可能检测不出,取决于是如何损坏的。例如,如果一个整数值发生了位翻转时,它就会被发现。

 

在SQL Server2008中,temp数据库中允许开启 CHECKSUM则弥补了上述不足。你可以用这样的命令开启

ALTER DATASE tempdb set PAGE_VERIFY CHECKSUM

 

对于新安装的SQL Server2008,所有的tempdb都默认开启CHECNSUM功能,用户可以使用ALTER DATABASE功能关闭这一功能,但是我们不建议这样做。对于从其它版本升级到SQL Server2008中的数据库,用户可以明确开启在tempdb中的CHECKSUM功能,对性能的影响也非常小(对CPU使用率的影响小于2%),基本和在其他用户数据库中消耗一样。不同之处在于,因为CHECKSUM功能只在页写入磁盘的时候运行而tempdb没有checkpoint,所以tempdb只在内存压力大时写入磁盘。所以你可能不会看到tempdb中有很多次计算CHECKSUM。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
页面
  checksum   SQL2005 的新功能,提供了一种比残缺页检测强大的机制检测 IO 方面的损坏。以下是详细描述:

页面 CHECKSUM:

在数据库页面从被写入磁盘到被SQL Server读取的这段时间内,有可能由于外界原因发生损坏。比如I/O设备的损坏,驱动的损坏或者由于电源不稳没有写完整。Checksum机制使SQL Server可以检测到这些损坏。需要注意的是,Checksum机制只能使我们确定是不是I/O子系统引起页面损坏,但是不能自动修复它们。作为管理员,我们可以利用这些信息来辨识出并更换损坏的I/O设备,也可以利用重建索引或者修复损坏文件等方法修复已发生的页面损坏。

Checksum功能可以由Alter Database命令在数据库上逐个开启和关闭每一个数据库上的。当开启Checksum时,SQL Server会在页面被写入和被读取的时候计算页面的ChecksumSQL Server基于页面上的位模式计算Checksum,储存在页头部,然后发一个I/O来写页面。SQL Server在读取页面时用相同的方法再计算一次checksum,并与储存在页面头的checksum值进行比较。如果结果相同则说明在读写周期内页面没有损坏。计算checksum的算法是复杂的,因为会涉及到多个页面的读写,增加CPU的负荷,可能会影响系统的吞吐量。此外,checksum不是与页面位模式一一对应的,不同页面也有可能有相同的checksum值,所以有极小的可能性事页面损坏检查不出来。

我们对以下几种情况特别做一些说明:

l  数据库创建一段时间后才开启checksum

只有在开启checksum功能后每次写页面时才会计算checksum,读取页面时才会重新计算。如果数据库创建之初没有开启Checksum,会有一些页没有记录下checksum。当读取这些页面时SQL Server不会计算checksum,因为没有可以用来比较的checksum,计算就没有意义。目前没有命令或工具强制计算数据库所有页面的checksum。这样做并没有太大的好处。试想,当数据页面已经被破坏时,我们只能计算损坏的checksum,而不知道正常情况下的checksum,损坏也无从检测。当然,如果有这样的命令或工具存在,我们就能检测到由于位损坏(如一个有效的页在被写入到磁盘后发生损坏)引起的页面损坏,或者在数据库文件被转移或者复制到其他媒介的时检测到损坏了。

l  停止checksum功能

当不希望checksum消耗CPU资源或者确信I/O系统可靠的时候,您可以停止Checksum功能。停止后,不再计算和记录checksum值。这种情况下, SQL Server就可能受到外界造成的页面损坏,一个检测不到的损坏可能导致:

o      数据丢失,除非运行全备份恢复(前提是日志备份没有被破坏)

o      潜在的应用程序异常,特别是在损坏没有改变页面结构而只是改变了某些数据时。

o      降低数据库的可用性,因为必须要执行介质恢复来修正损坏。

l  如何验证数据库所有页的checksum

使用DBCC CHECKDB命令,最好加上PHYSICAL_ONLY参数以降低资源的消耗。

l  数据库开启残缺页(torn page)检测

数据库的Checksum检测和残缺页检测不能同时开启。因为checksum机制对于页面损坏的验证比残缺页更严格,而产生checksum匹配但是页面残缺的可能性极小,所以开启checksum相当于自动获取残缺页检测。如果您关闭了页面的checksum功能,那我们建议您开启残缺页检测,用较小的代价尽可能检测I/O子系统异常。

备份 checksum

备份checksum和页面checksum算法一样,每当页面做备份时计算checksum,只不过多个页面checksum的值将合并成一个备份checksum值。备份checksum储存在备份媒介,而不是页面中。备份期间您可以选择生成备份checksum用于恢复备份时检测备份时候损坏。另外,如果页面checksum可用,可以在备份和恢复过程中用于确认。

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
### 回答1: checksum和rolling counter都是数据校验和算法的一种。 checksum是一种计算校验和的算法,通常用于验证数据的完整性。该算法将数据分成块,并计算每个块的校验和,然后将这些校验和相加得到总的校验和。接收方可以使用相同的算法来计算总的校验和,然后将其与发送方提供的校验和进行比较,以验证数据是否在传输过程中出现了错误。 rolling counter也是一种计算校验和的算法,但是它更适合于流数据,如串口通信。该算法将数据流分成连续的块,并对每个块进行单独的校验和计算。接收方可以在接收数据时使用rolling counter算法来计算每个块的校验和,并将其与发送方提供的校验和进行比较,以验证数据的完整性。 总的来说,checksum和rolling counter都是用于数据校验的算法,它们都可以确保数据在传输过程中没有被修改或损坏。 ### 回答2: checksum和rollingcounter都是用于数据校验的技术,但它们的原理与应用略有不同。 checksum(校验和)是一种数据完整性校验技术,用于检测数据传输过程中是否出现错误。checksum的实现方式是将数据块中的所有字节按照一定的规则相加,得到一个校验和。接收方在收到数据后也按照相同的规则计算校验和,如果两个校验和不一致,说明数据出现了错误。checksum常见的实现方式有加法校验和、反码求和校验和、CRC校验等。其中,CRC校验是最常用的校验方式之一,它可以在检测到错误的同时,准确地指出出错的位置,具有很高的可靠性。 rollingcounter(滚动计数器)是一种动态计数器,用于计算数据流的平均速率。rollingcounter的实现方式是将数据流分成若干个时间窗口,在每个时间窗口内统计数据流的字节数,然后将这些字节数相加得到滚动计数器的值。rollingcounter常用于网络、存储系统等领域,可以帮助及时发现异常状况,进行性能优化和问题排查。 总的来说,checksum和rollingcounter都是用于校验数据的技术,但它们的实现方式和应用场景有所不同,checksum主要用于检测数据传输中的错误,rollingcounter则用于统计数据流的平均速率。在实际应用中,我们可以结合两种技术,来提升数据传输和统计的准确性和可靠性。 ### 回答3: Checksum是一种校验和算法,常用于数据传输或存储过程中,用于检测数据完整性。它通过对数据的每一个字节进行简单的算术运算,得出一个固定长度的校验和。发送方在传输数据前计算校验和并随数据一起传输,接收方在接收到数据后重新计算校验和,并与发送方传输的校验和进行比较。如果两个校验和不相同,则说明数据在传输或存储过程中出现了错误,需要进行修正。常见的校验和算法包括MD5/HASH/SHA1等。 Rolling counter是一种计数器算法,通常用于计算数据流中的数据包数量。它通过对每个数据包进行计数,并根据计数结果进行相关的操作。常见的rolling counter算法包括: 1. Simple counter:简单计数器,递增计数器的值,对于长时间监测数据流的应用当数据流在传输过程中没有出现问题时,计数器的值也以大于一个固定值。当计数器的值达到设定的值时,做出一些相应的处理。 2. Sliding window counter:滑窗计数器,滑动窗口是指在一个指定的时间段内,限制数据流的流量,从而控制传输速度,避免网络过载。基于滑窗计数器,可以对数据包进行分组统计。 3. Bloom filter probabilistic counter:布隆过滤器概率计数器,基于布隆过滤器,对数据包进行计数,并通过布隆过滤器的特殊性质,对数据流中的数据包进行去重。这种计数器在数据包较多的情况下能够提高计数器的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值