love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

Phone:18180207355 提供专业Oracle/MySQL/PostgreSQL数据恢复、性能优化、迁移升级、紧急救援等服务

oracle asm 剖析系列(3) –disk directory

本站文章除注明转载外,均为本站原创: 转载自love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

本文链接地址: oracle asm 剖析系列(3) –disk directory

这是oracle asm系列的第3篇,这篇文章中我将重点介绍disk directory元数据的结构。首先从asm disk header中,
我们可以看到如下的相关信息:

虽然disk header block中的信息并没有直接反应出来disk directory的信息,但是,你可以想象,既然alocate table元数据
都在第2个AU里面,而那么必然disk directory信息也在该AU里面,因为进行在读取alocate table信息时,必然要先读取disk directory。

有同学看不明白,这里补充一点,如何定位到具体位置.
那么如何定位到disk directory的具体位置呢?其实很简单,元数据也是一个file,如下:

从这里可以看到,该disk的disk directory信息是存在第3个au中,元数据在第1个block,其他block是数据:

如下部分是另外一个disk group中一个disk的信息,以这个为例进行解释:

从上面的信息我们可以看出,asm disk directory的结构大概如下,分为3个部分:

1)kfbh, 该部分表示block header,这部分内容都是基本上一样的,没什么可说的
2)kffdnd,这部分是目录结构信息

3)kfddde,这部分结构也是disk directory元数据中最为重要的一部分结构,其实通过前面的kfed 的内容,我基本上就能知道个大概了。
我这里就拿上面的kfddde[0]为例,进行说明,如下:

下面我接着继续剖析:

下面的这部分内容是zone信息,我是这样理解的,同一个磁盘组,asm将该磁盘组中的所有disk看成一个整体,然后
将这些disks进行划分,有点类似分区的感觉或在VG的基础上创建LV的感觉,这里需要注意的是,如果你的磁盘组中有
3个盘,那么这里就会分配3个zone,如果是4个就会分配4个,总之,是一一对应的。 这样也就保证了同一个磁盘组中
的数据是绝对分散的。

到这里,关于asm disk directory 基本上就描述完了,最后再补充下关于asm diskgroup,在add/drop disk时,asm的reblance情况。
oracle asm 剖析系列(3) –disk directory插图
从上面的图内容,我们可以看到,其实在reblance的过程中,不仅仅是我们实际的业务数据会进行均衡操作,还包括asm的元数据。
oracle提供了一个试图v$asm_operation,可以同来观察asm disk reblance的过程、以及估计reblance的剩余时间等等。
其中disk reblance操作是由rbal进程来完成的,而数据库参数asm_power_limit则控制着rbal进程的个数,如果当你在进行
add disk/drop disk等操作时,容量很大的情况下,可以考虑设置较大的参数,那样reblance操作可能会相对快很多. 例如:

alter diskgroup data1 add disk ‘/dev/sdd’ reblance power 5;

不过需要注意一点的是,最好不要在业务期间做reblance,因为该操作本身是比较消耗资源的,而且容易出问题。

One Response to “oracle asm 剖析系列(3) –disk directory”

  1. sky Says:

    大神,
    怎么通过这两个语句确定disk directory的具体位置的?
    [oracle@10gasm ~]$ kfed read /dev/sdb |grep f1
    [oracle@10gasm ~]$ kfed read /dev/sdb aun=2 blkn=2 |grep au |head -5

Leave a Reply

You must be logged in to post a comment.