理解BCM页

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

今天我们来讨论下批量更改映射(Bulk Changed Map:BCM)页,还有大容量日志恢复模式( bulk logged recovery model )如何运作的。

批量更改映射(Bulk Changed Map:BCM):SQL Server使用BCM页来跟踪自上次完全备份后,被大容量日志操作修改的区。在数据库文件里,BCM页是第7页。BCM对每个跟踪的页都有一个位。如果这个位标记是1,表示对应区在上次日志备份后因为大容量日志操作而修改。如果这个位标记为0,表示在上次日子备份后因为大容量日志操作而未被修改。一个BCM页可以保存近64000个区的信息。BCM页在每511232页重复一次。一个BCM页可以跟踪63904个区的信息。第2个BCM页会出现在第511239页。

在所有数据库里你都可以找到BCM页,但只有数据库进行大容量日志恢复模式时才会用到。在这个恢复模式里,当进行日志备份时,SQL Server会扫描BCM页,在里面查找在使用事务日志进行日志备份时标记为已经更改的区。这让SQL Server进行大容量日志恢复是可回滚的,如果是数据库是从数据库备份中还原,并且有一系列的事务日志备份。在大容量日志恢复模式里,大容量日志操作包括BCP,Bulkinsert, Select Into等在事务日志里是最低程度写入日志的,并通过BCM页对修改过的区进行跟踪。这让SQL Server 进行大容量操作时有更好的性能。

BCM页在简单还原和完整还原模式里不涉及任何操作。在简单和完整还原模式里,大容量日志操作被当作完全日志操作。简单来说,在简单和完整还原模式里,BCM页不会对通过大容量日志操作产生的改变进行跟踪。

我们用一个例子来理解下:新建一个空数据库,修改数据库还原模式为大容量日志恢复模式,将数据库进行备份,最后用DBCC PAGE来查看BCM页的信息。

复制代码
1 CREATE DATABASE BCMdb
2 GO
3 ALTER DATABASE BCMdb SET RECOVERY BULK_LOGGED
4 BACKUP DATABASE BCMdb TO DISK='D:\BCMdb.bak'
5 GO
6 DBCC TRACEON(3604)
7 DBCC PAGE('BCMdb',1,7,3)
复制代码

可以清楚看到,没有看到因大容量日志操作而造成的分区改变。我们来执行一个大容量日志操作。

1 SELECT * INTO BCMdb..SalesOrderDetail FROM AdventureWorks2008R2.sales.SalesOrderDetail
2 DBCC TRACEON(3604)
3 DBCC PAGE('BCMdb',1,7,3)

可以看到,有2条被标记为MIN_LOGGED 。第1条是因为IAM页中的改变,第2条是因为SELECT INTO插入的数据操作。现在当我们进行日志备份,SQL Server会备份事务日志,就是BCM页里标记为改变的区对应的事务日志。日志备份后,BCM页的相关区,因大容量日志操作而打上改变的标记,会打上未改变的标记。我们来进行下日志备份。

1 BACKUP LOG BCMdb TO DISK='D:\BCMdblog.trn'
2 GO
3 DBCC PAGE('BCMdb',1,7,3)

注意,BCM页不会因为完整或差异备份做相应改变。事务日志备份是刚才事务日志的基础。SQL Server应该知道2个事务日志之间所发生的改变。如果差异或完整备份清空了BCM页里的标记,下个事务日志备份就不能跟踪或还原上一个日志备份和完整或差异备份之间的改变。简而言之,一个完整或差异备份不会打断事务日志备份链。


本文转自Woodytu博客园博客,原文链接:http://www.cnblogs.com/woodytu/p/4492746.html,如需转载请自行联系原作者

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
存储 程序员 内存技术
4.1页式存储
计算机组成原理之页式存储
117 0
页内跳转
页内跳转
71 0
|
前端开发 编译器 开发者
首页-底部页签 |学习笔记
快速学习 首页-底部页签
63 0
首页-底部页签 |学习笔记
|
前端开发 编译器 开发者
首页-底部页签
快速学习 首页-底部页签 |学习笔记
93 0
首页-底部页签
|
前端开发 开发者 容器
产品区块-页签 |学习笔记
快速学习 产品区块-页签
82 0
|
前端开发 开发者
分类页-顶部通栏 |学习笔记
快速学习 分类页-顶部通栏
116 0
分类页-顶部通栏 |学习笔记
|
JavaScript 前端开发 开发者
产品-初始化滑动页签 |学习笔记
快速学习产品-初始化滑动页签
92 0
产品-初始化滑动页签 |学习笔记
|
搜索推荐 UED SEO
SEO聚合页和专题页的区别
我们在优化网站时接触聚合和专题页面,对搜索引擎来说,相关的聚合和专题页面的质量很高,所以合理利用这两个页面可以配置很多关键词,今天就seo中的聚合页面和专题页面的不同进行说明。
SEO聚合页和专题页的区别
|
JavaScript
22、商品列表页
前言:本章主要是商品列表页的一个基本布局讲解。(具体效果请下滑到底部) Github:https://github.com/Ewall1106/mall(请选择分支chapter22) 1、新建goodList.
1365 0
|
关系型数据库 MySQL Linux
解读InnodDB页面--普通页结构
前言 很久之前了解到innodb_space,觉得很强大,可视化了InnoDB页面,但是没有形成文档,总结出来,有一些经常被问到的东东可以用这个查看了。 环境 centos 7 Linux izhp3j8nb7nyq2g923r9fvz 3.
2335 0