ASM Physically addressed metadata-Free space table和Allocation table

 

Allocation Table(AT)和Free space table(FST)都属于Physically addressed metadata,我们在介绍它们之前,先介绍一下asm磁盘的Stride的概念,每个asm磁盘根据不同的磁盘大小,可以分成多个Stride,Stride的大小定义在磁盘头kfdhdb.mfact(单位AU)

并且不同的AU_SIZE,Stride的大小也不相同,在11.2.0.4版本上的验证结果:

Allocation Unit Size

Stride size

1M

113792

2M

228480

>=4M

454272

每个Stride都有自己的Allocation Table和Free space table,用于管理该Stride内AU的分配情况和空闲情况。以AU_SIZE=1M为例,假设asm磁盘大小为500G,那么第一个Stride上的AU由AU号为0上的Allocation Table和Free space table管理,第二个Stride上的AU由AU号为113792上的Allocation Table和Free space table管理,以此类推。
磁盘头定义了第一个Stride的Allocation Table和Free space table的位置,第一个Stride的Free space table位于AU号为0的第2个block(块号从0开始),第一个Stride的第一个Allocation Table block位于AU号为0的第3个block。

下面解析FST block的内容

Free space table记录了该Stride总共有多少个Allocation Table block,以及每个Allocation Table block所管理的AU是否存在空闲,类似数据文件的文件位图块。
kfdfsb可以看作free space block的块头部分,占据24个字节。

  • max:该Stride总共有多少个Allocation Table block来管理AU,该例中1M的AU大小总共有256个元数据块,除去磁盘头和FST,总共254个Allocation Table block,不同的AU大小,kfdfsb.max也不相同
  • cnt:该磁盘目前已经使用到了第几个Allocation Table block所管理的AU
  • kfdfse:为fst条目,一个fst条目对应一个Allocation Table block,描述了每一个Allocation Table block所管理的AU是否存在空闲。

Allocation Unit Size

kfdfsb.max

1M

254

2M

510

>=4M

1014

第一个Allocation Table block的内容

Allocation Table在AT条目(kfdate)中记录了磁盘Stride的每一个AU的分配情况(V=1为分配,V=0为未分配)

  • aunum:该AT block的第一条at条目对应的au编号
  • shrink:一个AT block记录448个at条目
  • kfdate[n]记录的本磁盘第(n+1+kfdatb.aunum)个au分配给了FNUM(16进制)号asm文件的第(XNUM+1)个物理extent,以上面的kfdate[4]为例,该AT条目记录了本磁盘第5个AU分配给了3号asm文件的第3个物理extent

通过x$kfdat也可以查询某块asm磁盘AU分配情况

Column Name

Description

GROUP_KFDAT

Diskgroup number, join with v$asm_diskgroup

NUMBER_KFDAT

Disk number, join with v$asm_disk

COMPOUND_KFDAT

Disk compund_index, join with v$asm_disk

AUNUM_KFDAT

Disk allocation unit (relative position from the beginning of the disk), join with x$kffxp.au_kffxp

V_KFDAT

Flag: V=this Allocation Unit is used; F=AU is free

FNUM_KFDAT

File number, join with v$asm_file

XNUM_KFDAT

Progressive file extent number join with x$kffxp.pxn_kffxp

总结一下,asm磁盘根据磁盘大小可以分为多个Stride,每个Stride都有的FST和AT位于各自Stride的第一个AU上用于管理AU分配和回收,Stride的大小记录在磁盘头kfdhdb.mfact,实际上也等于(Stride的AT block数量)(一个AT block可管理多少AT条目)=kfdfsb.maxkfdatb.shrink。当AU分配时,都会在对应的AT条目上记录该AU分配给了哪个asm文件(kfdate[n].allo.hi的FNUM)的哪个物理extent(kfdate[4].allo.lo的XNUM);当AU回收时,会清理对应的AT条目。

此条目发表在Oracle, Oracle Recover分类目录,贴了, 标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注