存储引擎揭秘:基本结构之三——区
2010-10-14 18:13
281 查看
存储引擎揭秘:基本结构之三——区
原文地址:http://sqlskills.com/BLOGS/PAUL/post/Inside-the-Storage-Engine-Anatomy-of-an-extent.aspx
正文:
前面的文章我介绍了数据文件中的页,包括页结构和一些页类型。现在我想解释一下页是如何组织成区(
extent
)的。一个区是由数据文件中
8
个连续的页组成。区从数据文件头部开始,并且总是
64K
对齐(即:
8
页对齐)。区及其属性在
SQL SERVER 2000
和
2005
中是一模一样的。
SQL SERVER
中有两种类型的区:混合区和统一区。
混合区
分配给任意一条
IAM
链(
SQL SERVER 2000
中的一个索引或者是
2005
中的分配单元)的前
8
个页的分配单位是单个页,这种页被称为混合页。就是说每次分配的是一个单独的页而不是一个区。这样便允许非常小的表花费最小数量的空间。一旦一条
IAM
链跨过了前
8
页的门槛,以后便分配统一区,再也不会分配混合页了。
从混合区中分配来的混合页,不需要分配给特定的
IAM
链。因为这些区会被全局分配跟踪(通过
GAM
页),所以不会分配给一个
IAM
链的。混合区中若还有没分配的页,该区同时会被
SGAM
页跟踪。当需要分配一个混合页,系统就会检查
SGAM
页是否还有这样的区。如果没有的话,就会分配一个新的混合区,并从中分配一页,然后这个区就被
SGAM
页跟踪直到所有的页被分配。
因为混合区不会被分配给一个特定的
IAM
链,这就是说它可能分配给
8
个不同的
IAM
链。不管有多少页被分配给
IAM
链,
IAM
页本身总是混合页。这就是说一个混合区可有多种页类型,包括
IAM
页、数据页、索引页或文本页。
统一区
一旦跨过了
8
页的门槛,以后就从统一区上分配给
IAM
链了。这就是说一次分配一个区给一条
IAM
链,并在
IAM
链上的
IAM
页上标明——不管是谁映射该区所在的
GAM
区间的。该区同时会被相关的的
GAM
页跟踪是否已分配,这样其它的
IAM
链就不会再分配它了。
一个统一区的所有页必须分给同一条
IAM
链。然后,它们不需要是同一类型的页。比如,一个聚集索引会同时有数据和索引页。当一个区被分配给
IAM
链时,该区中的页并不是一次全被分配掉的(除非是大型数据操作),这些页通常是按需分配,每页的分配情况有
PFS
页跟踪。
当一个统一区的所有页都被释放,那么区本身就从拥有它的
IAM
链中释放了,并且可以再次分配给其他的
IAM
链,或者成为混合区。
为备份跟踪变化的区
系统中有两个地方用来跟踪变化的区:
1.
自上次完整备份以来所有改变的区会有相关的差异位图页(
differential bitmap page
)跟踪。这样差异备份时便可以知道哪些区需要备份而不是备份整个数据库了。当下次完整备份时所有的差异位图页都被复位。
2.
自上次完整、差异或日志备份以来一个区在
BULK-LOGGED
恢复模式下发生了大日志操作,会有相关的最小日志位图页(
minimally-logged bitmap page
)跟踪。大日志操作后的任何日志备份就会包含所有这些跟踪的区。当下次备份时,所有的最小日志位图页都会被复位。
原文地址:http://sqlskills.com/BLOGS/PAUL/post/Inside-the-Storage-Engine-Anatomy-of-an-extent.aspx
正文:
前面的文章我介绍了数据文件中的页,包括页结构和一些页类型。现在我想解释一下页是如何组织成区(
extent
)的。一个区是由数据文件中
8
个连续的页组成。区从数据文件头部开始,并且总是
64K
对齐(即:
8
页对齐)。区及其属性在
SQL SERVER 2000
和
2005
中是一模一样的。
SQL SERVER
中有两种类型的区:混合区和统一区。
混合区
分配给任意一条
IAM
链(
SQL SERVER 2000
中的一个索引或者是
2005
中的分配单元)的前
8
个页的分配单位是单个页,这种页被称为混合页。就是说每次分配的是一个单独的页而不是一个区。这样便允许非常小的表花费最小数量的空间。一旦一条
IAM
链跨过了前
8
页的门槛,以后便分配统一区,再也不会分配混合页了。
从混合区中分配来的混合页,不需要分配给特定的
IAM
链。因为这些区会被全局分配跟踪(通过
GAM
页),所以不会分配给一个
IAM
链的。混合区中若还有没分配的页,该区同时会被
SGAM
页跟踪。当需要分配一个混合页,系统就会检查
SGAM
页是否还有这样的区。如果没有的话,就会分配一个新的混合区,并从中分配一页,然后这个区就被
SGAM
页跟踪直到所有的页被分配。
因为混合区不会被分配给一个特定的
IAM
链,这就是说它可能分配给
8
个不同的
IAM
链。不管有多少页被分配给
IAM
链,
IAM
页本身总是混合页。这就是说一个混合区可有多种页类型,包括
IAM
页、数据页、索引页或文本页。
统一区
一旦跨过了
8
页的门槛,以后就从统一区上分配给
IAM
链了。这就是说一次分配一个区给一条
IAM
链,并在
IAM
链上的
IAM
页上标明——不管是谁映射该区所在的
GAM
区间的。该区同时会被相关的的
GAM
页跟踪是否已分配,这样其它的
IAM
链就不会再分配它了。
一个统一区的所有页必须分给同一条
IAM
链。然后,它们不需要是同一类型的页。比如,一个聚集索引会同时有数据和索引页。当一个区被分配给
IAM
链时,该区中的页并不是一次全被分配掉的(除非是大型数据操作),这些页通常是按需分配,每页的分配情况有
PFS
页跟踪。
当一个统一区的所有页都被释放,那么区本身就从拥有它的
IAM
链中释放了,并且可以再次分配给其他的
IAM
链,或者成为混合区。
为备份跟踪变化的区
系统中有两个地方用来跟踪变化的区:
1.
自上次完整备份以来所有改变的区会有相关的差异位图页(
differential bitmap page
)跟踪。这样差异备份时便可以知道哪些区需要备份而不是备份整个数据库了。当下次完整备份时所有的差异位图页都被复位。
2.
自上次完整、差异或日志备份以来一个区在
BULK-LOGGED
恢复模式下发生了大日志操作,会有相关的最小日志位图页(
minimally-logged bitmap page
)跟踪。大日志操作后的任何日志备份就会包含所有这些跟踪的区。当下次备份时,所有的最小日志位图页都会被复位。
相关文章推荐
- [转载] 存储引擎揭秘:基本结构之一——记录
- [转载] 存储引擎揭秘:基本结构之二——页
- [转载] 存储引擎揭秘:基本结构之三——区
- 存储引擎揭秘:基本结构之四——IAM页,IAM链和存储单元
- [转载] 存储引擎揭秘:基本结构之四——IAM页,IAM链和存储单元
- 存储引擎揭秘:基本结构之一——记录
- [转载] 存储引擎揭秘:基本结构之五——GAM、SGAM、PFS和其他分配映射页
- 存储引擎揭秘:基本结构之五——GAM、SGAM、PFS和其他分配映射页
- 存储引擎揭秘:基本结构之二——页
- cocos2d-x入门学习笔记,主要介绍cocos2d-x的基本结构,并且介绍引擎自带的示例
- oracle存储过程基本结构的编写与plsql测试执行
- 【MySQL】(一)MySQL 体系结构和存储引擎
- SQL Server2008存储结构之基本系统视图
- 线性表链式存储结构基本操作
- 基于InnoDB存储引擎的mysql数据库表结构详解
- T-SQL 存储过程: (修订版) 根据基本表结构及其数据生成 INSERT INTO ... 的 SQL (转)
- mysql 的 存储结构(储存引擎)
- [DB] 第一章、mysql体系结构和存储引擎 [Mysql] (百度文库)
- bo2-8.cpp 不带头结点的单链表(存储结构由c2-2.h定义)的部分基本操作(9个)
- 数据结构(一)顺序表1:顺序存储的基本操作