ASM 翻译系列第八弹:ASM Internal ASM file extent map

更新时间:2016-08-09 09:49:03 点击次数:1988次

当ASM创建一个文件时(例如数据库实例要求创建一个数据文件),它会以extent为单位分配空间。一旦文件被创建,ASM会传递extent映射表给数据库实例,后续数据库实例能在不和ASM实例交互的情况下访问这个文件。如果一个文件的extent需要被重新定位,比如磁盘组进行rebalance操作,ASM会告知数据库实例关于extent映射表的变更。

可以通过查询ASM实例的X$KFFXP视图来获取ASM文件extent映射表的内容。X$KFFXP视图中的每一行对应着所有处于mount状态磁盘组中每一个文件的每一个物理extent的信息。

译者注:1)网络上有不少关于X$KFFXP视图的解释,有些信息过于陈旧,需要指出,它记录的每一条记录都代表的是物理extent的信息,而非AU信息,X$KFFXP视图的SIZE_KFFXP字段,代表了此extent是由几个AU组成的,在启用11G可变extent特性后会出现SIZE_KFFXP大于1的情况,具体更多信息参考本系列的篇文章。2)X$KFFXP这里翻译成了X$KFFXP视图,只是为了便于理解,它的本质是一个内存的数据结构(fixed table),其数据不在buffer_cache中。 

X$KFFXP视图的重要字段包括:

在ASM实例中通过以下查询,能够看出磁盘组3内的ASM元数据文件的文件序号,名字和AU数量。

$ sqlplus / as sysasm
SQL> select NUMBER_KFFXP "ASM file number", DECODE (NUMBER_KFFXP, 1, 'File directory', 2, 'Disk directory', 3, 'Active change directory', 4, 'Continuing operations directory', 5, 'Template directory', 6, 'Alias directory', 7, 'ADVM file directory', 8, 'Disk free space directory', 9, 'Attributes directory', 10, 'ASM User directory', 11, 'ASM user group directory', 12, 'Staleness directory', 253, 'spfile for ASM instance', 254, 'Stale bit map space registry ', 255, 'Oracle Cluster Repository registry') "ASM metadata file name",
count(AU_KFFXP) "Allocation units" from X$KFFXP
where GROUP_KFFXP=3 and NUMBER_KFFXP<256 group by NUMBER_KFFXP
order by 1;

ASM file number ASM metadata file name             Allocation units --------------- ---------------------------------- ---------------- 1 File directory 3 2 Disk directory 3 3 Active change directory 69 4 Continuing operations directory 6 5 Template directory 3 6 Alias directory 3 8 Disk free space directory 3 9 Attributes directory 3 12 Staleness directory 3 253 spfile for ASM instance 2 254 Stale bit map space registry 3 255 Oracle Cluster Repository registry 135 12 rows selected.
SQL>

通过以上查询结果可以发现,这个磁盘组并没有包含所有类型的元数据文件(例如第十号和第十一号文件)。一个有意思的事情是,除了ASM实例的spfile,每个文件至少占用3个AU,对于这一点更多详细信息我们会在其他章节介绍。

我们再来以一个数据库控制文件为例查看下它的extent映射表。

第1步,查找DATA磁盘组内所有的数据库控制文件(以Grid所属的OS用户身份运行asmcmd命令)

$ asmcmd find --type controlfile +DATA "*" +DATA/DBM/CONTROLFILE/Current.256.738247649 +DATA/BR/CONTROLFILE/Current.299.748434267 $

第2步,检查DATA磁盘组的磁盘组序号(连接到ASM实例)

$ sqlplus / as sysasm
SQL> select GROUP_NUMBER from V$ASM_DISKGROUP where NAME='DATA'; GROUP_NUMBER
------------ 1

SQL>

第3步,检查磁盘组1中ASM 256号文件(+DATA/DBM/CONTROLFILE/Current.256.738247649)的extent映射表

SQL> select XNUM_KFFXP "Virtual extent", PXN_KFFXP "Physical extent", LXN_KFFXP "Extent copy", DISK_KFFXP "Disk", AU_KFFXP "Allocation unit" from X$KFFXP
where GROUP_KFFXP=1 and NUMBER_KFFXP=256 and XNUM_KFFXP<>2147483648 order by 1,2;

Virtual extent Physical extent Extent copy       Disk Allocation unit
-------------- --------------- ----------- ---------- --------------- 0 0 0 20 5 0 1 1 29 1903 0 2 2 6 82 1 3 0 22 6 1 4 1 31 8 1 5 2 9 3 2 6 0 30 8 2 7 1 23 1907 2 8 2 7 63 3 9 0 26 2 3 10 1 16 1904 3 11 2 6 4 ... 39 117 0 25 1913 39 118 1 15 1906 39 119 2 3 27 120 rows selected.

SQL>

以上输出可以看出这个控制文件是三路镜像,每个虚拟extent对应三个物理extent,还可以看出这个文件每个AU的实际位置。

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

回到顶部
嘿,我来帮您!