存储引擎揭秘:基本结构之三——区
来源:互联网 发布:时间管理app 知乎 编辑:程序博客网 时间:2024/05/17 01:02
存储引擎揭秘:基本结构之三——区
原文地址: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链和存储单元
- 存储引擎揭秘:基本结构之一——记录
- 存储引擎揭秘:基本结构之五——GAM、SGAM、PFS和其他分配映射页
- 三种基本的存储引擎比较
- 三种基本的存储引擎比较
- 三种基本的存储引擎比较
- 三种基本的存储引擎比较
- 三种基本的存储引擎比较
- 图的基本存储的基本方式三—结构体数组
- 导航引擎结构分析之三
- cocos2dx引擎基本结构
- 基本存储引擎比较
- 存储引擎揭秘:深入理解幽灵清除
- DCOM揭秘之三
- DCOM 揭秘之三
- DCOM揭秘之三
- maze
- 黑莓断网问题什么时候能解决
- C#将Bitmap转换为Icon
- dantt
- Pseduo Random Number Generator
- 存储引擎揭秘:基本结构之三——区
- 上班人员必读:“五险一金”详解!
- 初级邮件的发送
- Delphi 组件撰写常问问题
- GIF/PNG和JPG的区别
- C++的内存回收【转】
- 使用javascript读取Cookie值 - JQuery Cookie的用法
- W. :利用最小优先级队列实现对k个已序队列的合并排序。习题6.5-8
- vc 连接mdb数据库