码迷,mamicode.com
首页 > 数据库 > 详细

[译]SQL Passion Week 3: SQL Server的扇区管理

时间:2015-11-23 16:13:41      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

SQL Passion Week 3: SQL Server的扇区管理

 

混合扇区和统一扇区

 

  SQL Server中每8个数据页作为一个扇区. 在混合扇区中, 其包含的8个页可以分别属于不同的数据库对象; 另一方面, 统一扇区里的8个页都属于同一个数据库对象.

  为什么有这样一个区别呢, 这其实主要是因为一个历史遗留问题.  因为在上个世纪, 存储是非常昂贵的, 人们会尽可能有效的充分利用存储空间.

  当一个表和索引最初创建时, 总是创建在一个混合扇区上, 先在8kb的空间里进行增长. 这样, 小的表就只需要占据很小的存储空间.  当你的表增长到第9个页的时候, SQL Server才会分配给你一个统一扇区. 把混合扇区的页移到统一扇区, 后续的页继续分配到混合扇区, 然后累积到第17页时, 再分配一个统一扇区, 把混合扇区里的页移到第二个同意扇区, 以此类推. 放到今天, 我们肯定要对这个做法摇头, 但在那个存储昂贵的时期, 这个设计是非常非常重要的.

  技术分享

  

  扇区管理

  那现在的SQL Server如何管理这些扇区呢, 假设你现在有一个1TB的数据库, 这将包含数量巨多的扇区. SQL Server用了两个特殊的页(当然同样是8kb):

  • Global Allocation Map Pages (GAM)
  • Shared Global Allocation Map Pages (SGAM)

 

  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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!