标签:
SQL Passion Week 3: SQL Server的扇区管理
混合扇区和统一扇区
SQL Server中每8个数据页作为一个扇区. 在混合扇区中, 其包含的8个页可以分别属于不同的数据库对象; 另一方面, 统一扇区里的8个页都属于同一个数据库对象.
为什么有这样一个区别呢, 这其实主要是因为一个历史遗留问题. 因为在上个世纪, 存储是非常昂贵的, 人们会尽可能有效的充分利用存储空间.
当一个表和索引最初创建时, 总是创建在一个混合扇区上, 先在8kb的空间里进行增长. 这样, 小的表就只需要占据很小的存储空间. 当你的表增长到第9个页的时候, SQL Server才会分配给你一个统一扇区. 把混合扇区的页移到统一扇区, 后续的页继续分配到混合扇区, 然后累积到第17页时, 再分配一个统一扇区, 把混合扇区里的页移到第二个同意扇区, 以此类推. 放到今天, 我们肯定要对这个做法摇头, 但在那个存储昂贵的时期, 这个设计是非常非常重要的.
扇区管理
那现在的SQL Server如何管理这些扇区呢, 假设你现在有一个1TB的数据库, 这将包含数量巨多的扇区. SQL Server用了两个特殊的页(当然同样是8kb):
GAM来管理统一扇区, 在GAM页上, 有8000bytes,等同于64000bits.(8000 * 8) 每一个bit都代表了一个统一扇区. 如果一个bit是有值的,就表示这个统一扇区可用, 相反, 则表示这个统一扇区已被占用.
也就是说,一个GAM页能管理4GB的数据( 64000 * 64kb / 1024 / 1024 ).
SGAM也是同样的道理.
当我们向表中插入一条数据时, SQL Server就会通过SGAM寻找一个至少有一个空页可用的混合扇区来放入. 而当表/索引超过64kb时,就会通过GAM来找到一个可用的统一扇区.
[译]SQL Passion Week 3: SQL Server的扇区管理
标签:
原文地址:http://www.cnblogs.com/alphaqcode/p/4988441.html