oracle table space,Oracle ASM Free Space Table

在进行创建文件或者文件resize过程中,需要有一个快捷入口,可以迅速的知道当前磁盘有哪些可用的(free状态的)AU,ASM Free Space Table 简称FST表就是提供一个这样的功能,通过它可以快速的知道哪些allocation table(AT表)元数据块中有空闲的AU,它存储的是一个个的AT表元数据块的号码,FST指示了那个AT表可能包含可用的AUs。当一个磁盘被选择用来分配AU时,ASM会咨询磁盘的FST。这允许ASM跳过那些被占用殆尽的AT块。FST对于分配是一种最佳方法。FST存储在每个AT中的第二个块中。FST表和AT表都被称为物理元数据,它们经常位于ASM磁盘的固定的位置。

FST存储位置

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

10g ASM中的PST所在位置

[oracle@jyrac3 lib]$ kfed read /dev/raw/raw3 aun=0 blkn=0 | grep fstlocn

kfdhdb.fstlocn: 1 ; 0x0cc: 0x00000001

11g ASM中的PST所在位置

[grid@jyrac1 ~]$ kfed read /dev/raw/raw10 aun=0 blkn=0 | grep fstlocn

kfdhdb.fstlocn: 1 ; 0x0cc: 0x00000001

[grid@db1 disks]$ kfed read /dev/oracleasm/disks/RLZY_DATA1 aun=0 blkn=1 | more

kfbh.endian: 1 ; 0x000: 0x01

kfbh.hard: 130 ; 0x001: 0x82

kfbh.type: 2 ; 0x002: KFBTYP_FREESPC

kfbh.datfmt: 2 ; 0x003: 0x02

kfbh.block.blk: 1 ; 0x004: blk=1

kfbh.block.obj: 2147483651 ; 0x008: disk=3

kfbh.check: 4111437318 ; 0x00c: 0xf50f8e06

kfbh.fcn.base: 3323 ; 0x010: 0x00000cfb

kfbh.fcn.wrap: 0 ; 0x014: 0x00000000

kfbh.spare1: 0 ; 0x018: 0x00000000

kfbh.spare2: 0 ; 0x01c: 0x00000000

kfdfsb.aunum: 0 ; 0x000: 0x00000000

kfdfsb.max: 254 ; 0x004: 0x00fe

kfdfsb.cnt: 12 ; 0x006: 0x000c

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: 0 ; 0x018: FREE=0x0 FRAG=0x0

kfdfse[1].fse: 0 ; 0x019: FREE=0x0 FRAG=0x0

kfdfse[2].fse: 0 ; 0x01a: FREE=0x0 FRAG=0x0

kfdfse[3].fse: 119 ; 0x01b: FREE=0x7 FRAG=0x7

kfdfse[4].fse: 16 ; 0x01c: FREE=0x0 FRAG=0x1

kfdfse[5].fse: 16 ; 0x01d: FREE=0x0 FRAG=0x1

kfdfse[6].fse: 16 ; 0x01e: FREE=0x0 FRAG=0x1

kfdfse[7].fse: 16 ; 0x01f: FREE=0x0 FRAG=0x1

kfdfse[8].fse: 16 ; 0x020: FREE=0x0 FRAG=0x1

kfdfse[9].fse: 16 ; 0x021: FREE=0x0 FRAG=0x1

kfdfse[10].fse: 16 ; 0x022: FREE=0x0 FRAG=0x1

kfdfse[11].fse: 16 ; 0x023: FREE=0x0 FRAG=0x1

kfdfse[12].fse: 0 ; 0x024: FREE=0x0 FRAG=0x0

kfdfse[13].fse: 0 ; 0x025: FREE=0x0 FRAG=0x0

kfdfse[14].fse: 0 ; 0x026: FREE=0x0 FRAG=0x0

kfdfse[15].fse: 0 ; 0x027: FREE=0x0 FRAG=0x0

kfdfse[16].fse: 0 ; 0x028: FREE=0x0 FRAG=0x0

kfdfse[17].fse: 0 ; 0x029: FREE=0x0 FRAG=0x0

kfdfse[18].fse: 0 ; 0x02a: FREE=0x0 FRAG=0x0

kfdfse[19].fse: 0 ; 0x02b: FREE=0x0 FRAG=0x0

kfdfse[20].fse: 0 ; 0x02c: FREE=0x0 FRAG=0x0

kfdfse[21].fse: 0 ; 0x02d: FREE=0x0 FRAG=0x0

kfdfse[22].fse: 0 ; 0x02e: FREE=0x0 FRAG=0x0

kfdfse[23].fse: 0 ; 0x02f: FREE=0x0 FRAG=0x0

....省略....

kfdfse[4031].fse: 0 ; 0xfd7: FREE=0x0 FRAG=0x0

kfdfse[4032].fse: 0 ; 0xfd8: FREE=0x0 FRAG=0x0

kfdfse[4033].fse: 0 ; 0xfd9: FREE=0x0 FRAG=0x0

kfdfse[4034].fse: 0 ; 0xfda: FREE=0x0 FRAG=0x0

kfdfse[4035].fse: 0 ; 0xfdb: FREE=0x0 FRAG=0x0

kfdfse[4036].fse: 0 ; 0xfdc: FREE=0x0 FRAG=0x0

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

大的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的第一个块:

[grid@db1 disks]$ kfed read /dev/oracleasm/disks/RLZY_DATA1 aun=113792 blkn=1 | grep type

kfbh.type: 2 ; 0x002: KFBTYP_FREESPC

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

[grid@db1 disks]$ kfed read /dev/oracleasm/disks/RLZY_DATA1 aun=227584 blkn=1 | grep type

kfbh.type: 2 ; 0x002: KFBTYP_FREESPC

[grid@db1 disks]$ kfed read /dev/oracleasm/disks/RLZY_DATA1 aun=341376 blkn=1 | grep type

kfbh.type: 2 ; 0x002: KFBTYP_FREESPC

[grid@db1 disks]$ kfed read /dev/oracleasm/disks/RLZY_DATA1 aun=455168 blkn=1 | grep type

kfbh.type: 2 ; 0x002: KFBTYP_FREESPC

参考

Oracle Automatic Storage Management: Under-the-Hood & Practical Deployment Guide

http://asmsupportguy.blogspot.jp/2013/08/free-space-table.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值