星空网 > 软件开发 > 数据库

SQL Server :理解DCM页

我们已经讨论了各种不同的页,包括数据页、GAM与SGAM页、PFS页,还有IAM页。今天我们来看下差异变更页(Differential Change Map:DCM ),还有差异备份(differential backups)。

差异变更页(Differential Change Map:DCMSQL Server使用差异变更页来跟踪自上次完全备份后修改过的区。DCM页在数据文件里是第6页。DCM页用来跟踪完全备份后修改过的区。DCM为每个跟踪的区使用每一位来记录。如果这个位是设置为1,那么自上一次完全备份后,这个区是被修改过了。如果这个位设置为0,那么自上一次完全备份后,这个区没有修改过。一个DCM页可以保存64000个左右区的信息。每隔511232页,DCM会重复一个。一个DCM页可以跟踪63904个区的变更信息。第2个DCM页会出现在第511238页。

差异备份通过读取DCM页来识别自上一次完全备份后,哪些区被修改过。这会大大减少差异备份扫描页数。差异备份花费的时间与自上次完全备份后修改的区数成正比,与整个数据库的大小无关。

我们新建一个空数据库,然后将其完全备份,并通过DBCC PAGE查看DCM页的信息。

1 CREATE DATABASE DCMdb2 GO3 BACKUP DATABASE DCMdb TO DISK='D:\DCMdb.bak'4 GO5 DBCC TRACEON(3604)6 DBCC PAGE('DCMdb',1,6,3)

SQL Server :理解DCM页

可以看到,从第0页到第32页的区,自上次完全备份后,有发生改变。这并不是说,这32页每页都有改变。我们可以确定的说,至少有4页发生改变,一个区一个页。这可能是因为完全备份命令触发的内部表改变。

我们往表里插入点数据,再用DBCC PAGE命令看下DCM页的信息。

1 SELECT * INTO DCMdb..SalesOrderDetail FROM AdventureWorks2008R2.sales.SalesOrderDetail2 DBCC PAGE('DCMdb',1,6,3)

SQL Server :理解DCM页

通过SELECT INTO我们往数据库里创建了新表,并往里面插入了数据,这会触发很多系统表的变更。结果我们看到自上次完全备份后,很多区标记为改变。一直到1:167页,这里的改变都是内部对象的修改。页从1:184至1:1679的改变,是因为我们SELECT INTO语句触发的。当我们进行差异备份时,SQL Server读取DCM页,这些变更页会在差异备份里做上标记。例如我们刚才提到的,页(1:0-1:24)在DCM页标记为改变页,实际可能只有有4个页发生改变,但在差异备份里,这32个页都会备份。
我们进行一个差异备份,并通过DBCC PAGE看看DCM页的信息。

1 BACKUP DATABASE DCMdb TO DISK='D:\DCMdbifferential.bak' WITH DIFFERENTIAL2 3 DBCC PAGE('DCMdb',1,6,3)

SQL Server :理解DCM页

可以看到差异备份不会改变DCM页的内容。

SQL Server :理解DCM页

我们来计算下这个备份大小是否和DCM改变页的大小一致。

((32-0) + (56-48) + (88-72)  + (136-112) +(168-144)+(1680-184)  ) * 8=12800KB ,基本接近,这里的差距是文件头信息。

我们现在进行一次完整备份,再用DBCC PAGE看下DCM页的信息。

1 BACKUP DATABASE DCMdb TO DISK='D:\DCMdb2.bak'2 DBCC PAGE('DCMdb',1,6,3)

SQL Server :理解DCM页

现在SQL Server清空了DCM页。所有页都被标记为未改变,除了4个分区1:0-1:32。这个备份将用来后续差异备份的基础。有个选项可以设置完全备份不影响现存的备份链。

1 BACKUP DATABASE DCMdb TO DISK='D:\DCMdb2_Copy.bak' WITH COPY_ONLY

在这个情况下,SQL Server不会重设DCM页。DCMdb2.bak文件还是完全备份文件,并未后续差异备份做基础。这在一些你想完全备份又不想影响到备份链的时候可以用到。
小结一下:SQL Server通过DCM页跟踪分区改变信心。当进行差异备份时,SQL Server只备份DCM页里标记为改变的区。它帮助SQL Sever加速差异备份操作,通过不扫描所有的页看看有没有修改(或自上次完整备份有没有改变)。差异备份不会清空DCM页,它只备份从上次完全备份后发生改变的区。当进行完整备份时,SQL Server在DCM页重设位状态,标记它们为未改变。

 




原标题:SQL Server :理解DCM页

关键词:sql

sql
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

心动不如行动!亚马逊“发明家”带你赚遍全球!:https://www.ikjzd.com/articles/96011
深度解析:亚马逊站内推广大全!:https://www.ikjzd.com/articles/96014
这个网站,我是如何一年中赚到200w的?:https://www.ikjzd.com/articles/96015
亚马逊运营到底是做什么?前景如何?:https://www.ikjzd.com/articles/96016
外贸新手怎么找客户?看这一篇就够了!:https://www.ikjzd.com/articles/96017
6月1日,印度海运货物舱单及转运新规生效!:https://www.ikjzd.com/articles/96018
在古巴做游轮 古巴旅游项目:https://www.vstour.cn/a/363194.html
西藏旅游攻略自驾游需要多少天 去西藏旅游自驾游要多久时间:https://www.vstour.cn/a/363195.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流