WEB开发网
开发学院数据库MSSQL Server SQLSERVER数据存储内幕 阅读

SQLSERVER数据存储内幕

 2008-11-28 10:12:31 来源:WEB开发网   
核心提示: 其中:数据页面页首:96个字节,保存着页面的系统信息,SQLSERVER数据存储内幕(2),如页的类型、页的可用空间量、拥有页的对象的对象 ID 以及该页面所属于哪个物理文件, 数据区:对应于上图中所有数据行的总区域,就尽量放在混合盘区中,如果该对象大小增加到8个页面后,存放真正的数据,是

其中:数据页面页首:96个字节,保存着页面的系统信息,如页的类型、页的可用空间量、拥有页的对象的对象 ID 以及该页面所属于哪个物理文件。

   数据区:对应于上图中所有数据行的总区域,存放真正的数据,是以Slot为单位。一个Slot就是对应于一条数据记录行,从0开始编号,以16进制反序保存,Slot0, Slot1....。

  行偏移数组:用于记录该数据页面中每个Slot在数据页面所处的相对位置,便于定位和检索每个Slot在数据页面中的位置,数组中每个记录占两个字节。

四:存储分配单位:盘区(扩展 Extend)

虽然SQLSERVER中数据文件存储单位是页面(Page),但实际SQLSERVE并不是为页面为单位给数据分配空间,SQLSERVER默认的存储分配单位是盘区。这样做的主要原因是为了提高性能。为了避免频繁的读写IO,在表或其它对象分配存储空间,不是直接分配一个8K的页面,而是以一个盘区(Extend)为存储分配单位,一个盘区为8个页面(=8*8K=64K)。

但是这样做虽然减少了频繁的IO读写,提高的数据库性能,但却导致出一个新问题,那就是在存储那些只有少量数据,不足8K的对象,如果也是分配给一个盘区,就会存在存储空间上的浪费,降低了空间分配效率。

为解决上述问题,SQLSERVER提供了一种解决方案,定义了两种盘区类型,统一盘区和混合盘区。

其中:统一盘区只能存放同一个对象,该对象拥有这个盘区的所有页面    

   混合盘区:由多个对象共同拥有该盘区。

在实际为对象分配存储盘区时,为了提高空间利用率,默认的情况下,如果一个对象一开始大小小于8个页面,就尽量放在混合盘区中,如果该对象大小增加到8个页面后,SQLSERVER会为这个对象重新分配一个统一盘区。

Tags:SQLSERVER 数据 存储

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接