前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ASM 翻译系列第二十九弹:ASM INTERNAL Free Space Table

ASM 翻译系列第二十九弹:ASM INTERNAL Free Space Table

作者头像
沃趣科技
发布2018-03-23 18:39:13
8850
发布2018-03-23 18:39:13
举报
文章被收录于专栏:沃趣科技沃趣科技

原作者:Bane Radulovic

译者: 魏兴华

审核: 魏兴华

DBGeeK社群联合出品

Free Space Table

在进行创建文件或者文件resize过程中,需要有一个快捷入口,可以迅速的知道当前磁盘有哪些可用的(free状态的)AU,ASM Free Space Table 简称FST表就是提供一个这样的功能,通过它可以快速的知道哪些allocation table(AT表)元数据块中有空闲的AU,它存储的是一个个的AT表元数据块的号码,FST表用来加速AU的分配,避免读取已经完全被占用殆尽的AT块,造成分配空间效率的低下。

FST表技术上说其实是属于AT表的一部分,位于AT表的块1,FST表和AT表都被称为物理元数据,它们经常位于ASM磁盘的固定的位置。

Locating the Free Space Table

FST块存储在ASM磁盘头,通过kfed工具可以查看磁盘头的信息,其中kfdhdb.fstlocn的值代表了FST块位于磁盘头的第几个块。例如下面的输出代表了,FST块位于磁盘头的块1,也就是AU 0的第二个块。(块从0开始编号)。

$ kfed read /dev/sdc1 | grep kfdhdb.fstlocn
kfdhdb.fstlocn:                       1 ; 0x0cc: 0x00000001

我们通过kfed工具查看一下FST表的内容:

$ kfed read /dev/sdc1 blkn=1 | more
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            2 ; 0x002: KFBTYP_FREESPC
...
kfdfsb.aunum:                         0 ; 0x000: 0x00000000
kfdfsb.max:                         254 ; 0x004: 0x00fe
kfdfsb.cnt:                         254 ; 0x006: 0x00fe
kfdfsb.bound:                         0 ; 0x008: 0x0000
kfdfsb.flag:                          1 ; 0x00a: B=1
kfdfsb.ub1spare:                      0 ; 0x00b: 0x00
kfdfsb.spare[0]:                      0 ; 0x00c: 0x00000000
kfdfsb.spare[1]:                      0 ; 0x010: 0x00000000
kfdfsb.spare[2]:                      0 ; 0x014: 0x00000000
kfdfse[0].fse:                      119 ; 0x018: FREE=0x7 FRAG=0x7
kfdfse[1].fse:                       16 ; 0x019: FREE=0x0 FRAG=0x1
kfdfse[2].fse:                       16 ; 0x01a: FREE=0x0 FRAG=0x1
kfdfse[3].fse:                       16 ; 0x01b: FREE=0x0 FRAG=0x1
...
kfdfse[4037].fse:                     0 ; 0xfdd: FREE=0x0 FRAG=0x0
kfdfse[4038].fse:                     0 ; 0xfde: FREE=0x0 FRAG=0x0
kfdfse[4039].fse:                     0 ; 0xfdf: FREE=0x0 FRAG=0x0

对于这个FST块,第一个AT表元数据块位于AU0:

kfdfsb.aunum:                         0 ; 0x000: 0x00000000

这个FST块最大数量的FST条目可以达到254个,虽然上面kfed的输出中kfdfse[i]的编号到了4039,也就是有4039+1=4040个条目,但是有效条目只有254个。

kfdfsb.max:                         254 ; 0x004: 0x00fe

How many Free Space Tables

大的ASM磁盘可能会有超过一个stride,ASM磁盘头的kfdhdb.mfact显示了stride的大小(单位为AU),每一个stride有它自己的物理元数据,这意味着会有它自己的FST表。

第二个stride的物理元数据位于这个stride的第一个AU,我们通过kfed工具看一下:

$ kfed read /dev/sdc1 | grep mfact
kfdhdb.mfact:                    113792 ; 0x0c0: 0x0001bc80

以上显示了stride的大小为113792个AU,由于AU是从0开始编号,因此第一个stride最后的AU号是AU 113791,我们可以推算出第二个stride的FST位置是,AU 113792的第一个块:

$ kfed read /dev/sdc1 aun=113792 blkn=1 | grep type
kfbh.type:                            2 ; 0x002: KFBTYP_FREESPC

如预期,我们在AU 113792上有另一个FTS表,如果我们还有其他的stride,同样会在stride的开始AU处有FST表。如下面所示,一个大的ASM磁盘,会有数个stride,这里展示了在第三个stride的开始处的FST表:

$ kfed read /dev/sdc1 aun=227584 blkn=1 | grep type
kfbh.type:                            2 ; 0x002: KFBTYP_FREESPC

Conclusion

一般FST表位于每一个ASM磁盘的AU0的块1,如果磁盘比较大,就会有不止一个stride,每一个stride都会有它自己的FST表。

关于译者

魏兴华,沃趣科技高级技术专家,主要参与公司一体机产品、监控产品、容灾产品、DBaaS平台的研发和设计。曾就职于东软集团,阿里巴巴集团,Oracle ACE组成员,DBGEEK 用户组发起人,ITPUB认证博客专家,ACOUG、SHOUG核心成员。曾在中国数据库大会、Oracle技术嘉年华、ORCL-CON、YY分享平台等公开场合多次做过数据库技术专题分享。对Oracle 并行机制、数据库异常恢复方法、ASM等有深入的研究,人称”Oracle Internal达人”,对企业数据库架构设计、故障恢复、高并发下数据库性能调优有丰富的经验,擅长从等待事件角度分析解决数据库性能问题,是OWI方法论的提倡者和践行者。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 沃趣科技 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档