现在的位置: 首页 > 综合 > 正文

SQL Server存储引擎(4) – 数据

2013年08月14日 ⁄ 综合 ⁄ 共 1907字 ⁄ 字号 评论关闭

数据

 

1、文件

1)主数据文件.mdf初始大小至少为3MB,次要数据文件.ndf初始大小,同日志文件一样至少为512KB

 

2SQL SERVER在逻辑上用文件组将文件分批管理(类似ORACLETABLESPACE),一个文件组可以包含多个文件,插入数据时,同一个文件组内的所有文件等比例增长(ORACLE的一个TABLESPACE中多个文件逐个使用),例如:文件组中有两个文件,初始大小分别为100M200M,此时插入3M数据,file1新增(100/300*3M=1Mfile2新增(200/300*3M=2M,如下图:

4.1

 

3)页(page),SQL SERVER中的数据文件由8K大小的数据页组成,每个数据文件中的页从0开始编号,页大小不可以自定义(ORACLE可自定义),且每个页只可以属于一个数据对象;

 

4)区(extent),或者叫扩展,8个物理上连续的页为一个扩展,即64K,扩展的存在是为了避免不停地分配8K的页面,提高页面分配的效率。SQL SERVER有两种类型的区,如下图:

4.2

 

4.1)混合区:为了节约空间,将少量数据的表或索引存放在混合区中,当表或索引的数据增长到8页时,再使用统一区来存放,一个混合区有8个页,每个页可以属于不同的数据对象,即每个混合区最多为8个数据对象共享;

 

4.2)统一区:由单个数据对象所有,如果对表中现有数据创建索引,且索引的大小超过8页,则索引将全部使用统一区,没有混合区的分配过程。

 

2、页

2.1、非数据页

1)文件头FILE HEADER),每个数据文件的第1页,页号为0,该页主要包括当前文件的属性描述,比如:文件组ID、文件ID、文件当前大小、文件最大/最小值、文件增量、一系列的LSN等;

 

2)页面空闲空间PFS),每个数据文件的第2页,页号为1,该页记录当前数据文件每个数据页的空间状态:该页是为空、已满 1% 50%、已满 51% 80%、已满 81% 95% 还是已满 96% 100%PFS页内用1个字节来描述1个数据页的分配及空间状态,每个PFS页约有可用空间8088个字节,即数据文件内约每64M的空间会出现一个PFS页。PFS页描述数据页空间状态如下图:

4.3

 

3)全局分配映射GAM),每个数据文件的第3页,页号为2,该页记录当前数据文件每个区的分配状态,0为已使用(作为混合区或统一区,已被分配),1为未使用(自由区,未被分配);

 

3.1)结合PFSIAM页,如果数据对象没有可用空间时,且数据大小已超过8页,GAM为数据对象分配一个统一区,若数据大小尚未超过8页,则GAM结合SGAM为其寻找或者分配一个混合区;

 

3.2GAM页内用1位来描述1个区的分配状态,每个GAM页约有可用空间8000个字节,即数据文件内约每4G的空间会出现一个GAM页;

 

4)共享分配映射SGAM),每个数据文件的第4页,页号为3,该页记录当前数据文件哪些区被用作混合区,1为含有自由页面的混合区,0为自由区或已满的混合区;

 

4.1)当数据对象需要一个含有自由页面的混合区时,SGAM用来辅助GAM寻找或分配一个混合区;

 

4.2SGAM页内用1位来描述1个区的分配状态,每个SGAM页约有可用空间8000个字节,即数据文件内约每4G的空间会出现一个SGAM页;

 

5)索引分配映射IAM),该页跟踪数据文件中的页属于哪一个数据对象,IAM页头有8个页面指针,指向数据对象在混合区中的数据页(如果混合区中数据被删除可能少于8个指针),IAM页内比特位为1表示该区属于自己所属的数据对象,比特位为0表示该区不属于自己所属的数据对象;

 

5.1)每个数据对象的每个分配单元拥有一个IAM页,IAMGAMSGAM一样可以管理约4G的空间,如果分配单元包含多个文件,或者文件大小超过4G,则需要另外的IAM页来管理,IAM页间通过双向链表连接;

 

5.2)可以通过sysindexessys.system_internals_allocation_units系统目录得到first_IAM页面的位置,IAM页在数据文件中的位置是随机的,可能IAM页所在文件并不是所管理的那个文件;

4.4 

 

5.3)对于堆数据插入而言,通过IAM页和PFS页找到自己有剩余空间的页,直接插入数据即可,但索引数据插入的位置是由索引键的顺序决定的;

 

6)差异更改映射DCM),每个数据文件的第7页,页号为6(页号45为保留页),该页跟踪当前数据文件中,自上次全备份后被修改的区,以提高差异备份的效率,1为被修改过,0为未被修改;

 

6.1DCM页内用1

抱歉!评论已关闭.