概述
ASM Filesystem是建立在ASM Diskgroup上的,并且有元数据描述其内容布局,并且这些元数据也是记录在磁盘组上的,故ASM Diskgroup是自描述的。
ASM的元数据分成两类:Physical Metadata和Virtual Metadata
Physical Metadata:这类数据位于磁盘的固定位置,用于描述Diksgroup的信息
Virtual Metadata:我们知道RDBMS是通过在ASM磁盘组中创建文件的方式来使用ASM磁盘组的,这些文件叫ASM File,包括控制文件,spfile,数据文件,联机日志,归档日志,备份集等;这些文件在ASM Diskgroup上如何布局就是通过Virtual Metadata来记录的。Virtual Metadata本身也是以ASM File的形式保存在ASM Diskgroup上,为了与数据库的数据文件、控制文件这些通常意义上的ASM File相区别,对于Virual Metadata的ASM File有一个特殊的名称,File Directory。大概是因为这些文件的功能非常类似普通文件系统中的目录,是文件容器的原因吧。
Physical Metadata
Physical Metadata不是以ASM File形式存在的,而是固定存放于每个磁盘的头两个Allocation Unit。Physical Metadata包含了Disk Header、Allocation Table、Free Space Table和PST。
Disk Header
每个ASM Disk都有一个Disk Header,占据第一个AU的第一个数据块。这个数据块的内容提供ASM Discovery使用。Disk Header记录的是每个磁盘的专有数据(Disk-Specific),因此没有必要在其他磁盘上镜像。Disk Header包含如下内容
disk name
disk number
diskgroup name
failure group name
disk size
allocation unit (AU) size
creation time
mount time
ASM compatibility
RDBMS compatibility
file directory pointer
ASMLIB reserved block
Allocation Table
Allocation Table相当于一个表,ASM磁盘上的每一个AU都会在这个中有记录(Allocation Table Entry),如果这个AU分配给了某个数据文件,ATE中将包含对应的File number和Extent number。如果磁盘空间很大,这个Allocation Table不能存放所有的AU条目,就会有第二个Allocation Table出现,不过第二个Allocation Table是存放在第一个Allocation Table锁覆盖的最后一个AU的下一个AU。比如第一个Allocation Table存放在AU0上,假设这个Allocation Table有1000项,覆盖了AU2-AU1001;则第二个Allocation Table会被放在AU 1002上。
Free Space Table
Free Space Table也是一个表格,用于记录没有被使用的AU。每个Allocation Table的第二个Block(Block 1)用于存放Free Allocation Unit。在需要空间时,ASM不用再扫描AT,从这个表即可立即获得。
PST
PST用来跟踪Diskgroup的成员关系,每个磁盘的第二个AU用于保存PST内容。PST的数量取决于磁盘组的冗余状态和磁盘故障组的数据量,详细关系如下
External redundancy diskgroups:只有一份PST
Normal-redundancy diskgroups :当故障组数量大于等于3时,有3份PST。当故障组数量小于3时,每个故障组保存一份PST。
High-redundancy diskgroups :当故障组数量大于等于5时,有3份PST。当故障组数量小于5时,每个故障组保存一份PST。
每个AU1都会保存两份PST,其中一份作为另一份更新PST时的快照。当需要更新PST时,只更改其中的一份,更新完毕后再更新另一份PST
PST包含的内容如下
=====自身的描述信息=====
version number
timestamp
PST size (number of disks)
number of PST copies
list of disks containing the PST
value of compatible.asm (if COMPATIBLE.ASM >= 11.1)
=====用于成员之间跟踪的信息=====
disk status (for example, whether it is online or offline)
number of partners
list of partners
最后一个Block用于磁盘组的Heartbeat
Virtual Metadata
说明:如无特别说明,以下所指的文件号均为ASM File的文件号
Virtual Metadata记录了ASM File如何在磁盘组上分布的,也叫File Directory,根据记录的不同又可分为几种不同的File Directory。这些File Directory和普通的ASM File一样也是根据磁盘组的冗余策略进行镜像的:如果磁盘组采用External的冗余策略,则这些文件也不会被镜像;如果磁盘组采用的是Normal或High-Redundancy策略,这些文件都被做3份镜像。Virtual Metadata包含以下项目:
File Directory
Disk Directory
Active Change Directory (ACD)
Continuing Operations Directory (COD)
Template Directory
Alias Directory
Attribute Directory
File Directory
这个文件记录了ASM File的元数据,每个ASM File有一条记录,并使用文件号进行索引。File Directory位于每个磁盘组的第一个文件。具体包含如下内容Incarnation number、File size、File block size、File type、Redundancy (none, normal, or high)、Striping (coarse or fine-grained)、File creation time、File modification time (the time that the file was last opened for writing)和File layout
其中Incarnation number是根据创建文件的时间戳生成的,以确保唯一性。File block size根据文件类型的不同而不同。每个ASM元数据的块大小为4k,数据文件的块大小根据创建表空间时指定的大小从2k~32k不等,联机日志文件的块大小为512字节。file creation time即为ASM File的创建时间。File modification time记录了用于修改ASM File内容而打开ASM File的时间。这也意味着,File modification time记录的时间往往会早于最后一次修改的时间,该记录精确度为小时。File Layout,这部分内容记录了文件的Extent Pointer,并且是采用多级方式的记录,这里的Extent Pointer记录的是RDBMS中Extent所对应的Disk Number与AU Number。文件的头60个Extent Pointer叫做Direct Extents pointer,意味着通过这些指针可以直接访问到Extent。第61个Extent开始并不指向Extent,而是指向Indirect Extent,叫做Indirect Extents pointer。最多可有300个Indirect Extents pointer。Indirect Extent是一个二级列表,其中记录着真正的Extent Pointer,这部分内容并不包含于File Layout中。下图为包含1个包含10个ASM磁盘的磁盘组的File Layout信息
File Layout和Allocation Table关系可参见下图
File Layout信息也就是Extent Map,RDBMS需要从ASM获得这个Extent Map之后才能进行数据读写;在10g中,RDBMS必须获得Direct Extent和Indirect Extent才能打开文件;到11g后,只需要获得Direct Extent即可打开文件,而Indirect Extent部分按需请求。
Disk Directory
用于记录组成ASM磁盘组的ASM磁盘信息,和Physical Metadata中的PST类似,但内容更详细。包含Disk name、Failure group name、Disk size、Disk free space和Disk creation time。Disk Directory位于第2号文件
Active Change Directory (ACD)
ACD在ASM实例的作用和联机日志文件在RDBMS中的作用非常类似。每个实例会分配42MB的ACD空间,其中第一个数据块用于记录文件的Open/Close状态和检查点,这部分信息每3秒更新一次。而其他的空间采用循环的方式记录ACD Change Record。ASM利用ACD中的内容执行Instance Recover和Crash Recovery,以确保ASM的一致性。Active Change Directory位于第3号文件
Continuing Operations Directory (COD)
这部分内容用于跟踪运行时间长的操作,比如创建文件、Rebalance,用于操作失败后的恢复。COD相当于RDBMS中的UNDO Tablespace的功能。Continuing Operations Directory位于第4号文件
Template Directory
记录磁盘组所有ASM模板信息,模板记录包含:Template name、File redundancy、File striping policy和System flag。Template Directory位于第5号文件中
Alias Directory
用于记录磁盘组所有ASM别名(ASM alias)信息,别名记录包含:Alias name (or directory name)、Alias incarnation number、File number、File incarnation number、Parent directory和System flag。 Alias Directory位于第6号文件中
Attributes Directory
记录了磁盘组的属性信息,只有当ASM版本高于或等于11.1时才会有这个元数据。Attributes Directory位于第9号文件中。
参考至:《Oracle Automatic Storage Management: Under-the-Hood & Practical Deployment Guide》
《大话Oracle Rac》张晓明著
本文原创,转载请注明出处、作者
如有错误,欢迎指正
邮箱:czmcj@163.com