设为首页 收藏本站
查看: 963|回复: 0

[经验分享] SQL Server2000中的IAM链

[复制链接]
发表于 2016-11-11 00:47:56 | 显示全部楼层 |阅读模式
SQL Server2000中的IAM链

  

原文地址:
http://blogs.msdn.com/b/sqlserverstorageengine/archive/2006/06/24/645803.aspx

IAM(Index Allocation Map,索引分配映射)页用来跟踪单个文件中约4G大小的空间,跟踪的空间是按4G字节对齐。被跟踪的这4G大小的页被称为“GAM区间”(GAM Interval)。IAM页所跟踪的GAM区间中的空间是属于同一实体的(这里,我选择的是“实体”而没有使用SQL Server中的“对象”)。下面我们将了解IAM页的结构。

因为IAM只是跟踪单个文件里的一个GAM区间里的空间。若一个数据库包括多个文件,或者一些文件大小超过4G,并且实体分配的空间恰好跨越多个文件或跨越一个文件的多个GAM区间,那么你就会看到为了跟踪单个实体的所有空间是如何使用多个IAM页的了。

这时就要用到IAM链了。它是一个IAM页的链表,该链表将所有用来跟踪同一实体的分配空间的所有IAM页链接在一起。该链表并不排序,当需要一个新的IAM页时便添加进链表。链表中的IAM页是编号的,这个编号也是按添加时的顺序增加的。

到底是谁使用IAM链?——实体。这个概念在SQL SERVER 2000和2005中区别很大,所以我要用两篇文章来介绍它。
在SQL Server2000中,下面每个实体都有一个IAM链表:
1) 堆或聚集索引
a) 一个表只能选其一,不能两者皆有。
b) 它们的索引ID分别为0和 1。
2) 非聚集索引
a) 它的索引ID从2到250。
3) 文本存储
a) 对于堆或者聚集索引中的LOB列
b) 有时也被称为“文本索引”
c) 它拥有一个固定的索引ID值255。

很简单吧?我总结为:在SQL SERVER 2000中,每一个索引一个IAM链(如果你还记得IAM叫“索引分配映射”的话,我觉得还是很贴切的)。

到底IAM页是如何跟踪GAM区间中空间使用的呢?每个IAM页有两个纪录(record):IAM头部和位图。

IAM头部记录着IAM链的一些元数据,包括:
1) IAM页映射的GAM区间(译注:开始的页号)
2) IAM页在IAM链表中的顺序号
a) 一个新的页增加到链表中时,该序号便增加1
b) 这些页使用页的向前和向后指针(在页头部,不在IAM头部)链接的。并且链接时是严格按顺序号的。
3) 链表映射的索引的对象和索引ID
a) IAM链中所有的IAM页(和所有分配给该索引的页)都在头部有同样的对象和索引ID。

IAM页头部还有一个单页的数组。这只是在IAM链中的第一个IAM页中,用来跟踪分配给索引的页而不是区(一个区是8个连续的页)的。(译注:给索引分配空间,前8页是按页在混合区中分配的;超过8个页后才开始按区分配)

位图占用IAM页剩下的空间,每一位表示GAM区间中的每一个区。如果区被分配给该索引,那么对应位就置1,否则为0。很明显,为不同索引映射同一GAM区域的两个IAM页不可能有相同的位被置上。

你可以使用DBCC PAGE命令来查看IAM页的内容。关于IAM链,还需要注意一些事:
1) 它们不是自引用的(也就是说他们并不跟踪IAM页自己使用的空间)
2) 如果一些数据删除了,从而导致空间被收回,GAM区间中没有任何空间再被分配给索引了,但是IAM页是不会被删除的。
3) 只有下面的操作会将页从IAM链表中删掉:TRUNCATE TABLE,DROP TABLE,还有DBCC CHECKDB的一些修补动作。
4) DBCC INDEXDEFRAG会为索引拷贝一份IAM链,并且按文件和GAM区间排序以便计算出下面每个文件的下一个区/页。
5) IAM链的修补工作是异常复杂的。

我将在下面一篇文章中介绍SQL SERVER 2005的不同的地方。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-298442-1-1.html 上篇帖子: SQL Server2000的OpenXML特性 下篇帖子: SQL语句练习题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表