Oracle 10g ASM 的一点经验

Oracle 10g 的 ASM (自动存储管理) 真是一把双刃剑,对于存储的管理给 DBA 带来了不少便利,可也存在无穷多的问题。

ASM_POWER_LIMIT 参数

这个参数 ASM_POWER_LIMIT 参数控制 ASM 后台进程 ARBx 的数量。ARBx 进程用来进行 ASM 磁盘数据重新分布打散。ASM_POWER_LIMIT 取值 从 0 到 11(据说从 10gR2 开始可以设置为 0 ). 当新添加磁盘或者删除磁盘后,ASM 会启动 ARBx 进行 IO 分散操作,这是个非常消耗资源的动作,所以一定要选择系统空闲的时候进行。

关于 ASM 的条带与分配单元

ASM 默认的 Stripe Size 为 128K。 (一般操作系统的一个 IO 最大是 1M,对于 Block Size 为 8K 的系统,一般来说,db_file_multiblock_read_count 设置为 16 即可)。分配单元( Allocation Unit ) 是 1M,这个 AU 对应 extent 。在一些 DW 环境,随着数据量增大,AU 会非常的多,会产生性能影响。Stripe Size 和 AU 是可以通过 ASM 实例上的两个隐含参数调整的:

  • _asm_ausize
  • _asm_stripesize(注意最大1M,否则会有负面影响)

磁盘组不能 mount

错误信息类似如下:

ORA-15063: ASM discovered an insufficient number of disks for diskgroup "FOO"

这个问题是因为 设备 PVID 导致的,一般可以通过如下三个方法解决:

  • 对磁盘组中的设备进行 dd 操作抹去磁盘 0 块的内容
  • 用 FORCE 选项把磁盘添加到其他磁盘组中。
  • 用 FORCE 选项用所有这些磁盘创建新的磁盘组。

哪一种方式都有风险,操作需要谨慎。
EOF


7 thoughts on “Oracle 10g ASM 的一点经验

  1. piner

    redo的Stripe Size 是128K,而所有的数据文件的Stripe Size 都是1M的。对ASM来说,1M大小的Stripe Size 是一个比较合理的值。

    Reply
  2. wanghai

    ASM_POWER_LIMIT 这个东西还是蛮好用的,我们曾经在做数据仓库的测试时加磁盘,本来100个磁盘,后来又加了60个磁盘,把并行度开到11,结果2个小时就rebalance完了。
    从11g开始ASM的Stripe Size也不仅只有128K,1M两种选择了,11G ASM支持1, 4, 16, 64 MB的AU.

    Reply
  3. mapleleaf

    ASM_POWER_LIMIT is not a concern to me. The workaround is that setting it to 0 when adding/deleting a disk:
    alter diskgroup … add disk ‘…’ size … rebalance power 0;
    and then scheduling the balancing during non-peak period:
    alter diskgroup … rebalance power 11 nowait;

    Reply
  4. allnew

    2节点 11gR1,OEL 5.4 x64,OCFS2+ASM, 1个DISKGROUP,1个ASM磁盘 VOL1,冗余external。
    Oracle突然登陆不了,启动ASM实例报ORA-15063,经查ASM磁盘 VOL1已经丢失。
    根据同胞提示用kfed read asm磁盘,发现已经KFBTYP_INVALID。2节点现象是一样的,如何是好。
    /dev/oracleasm/disks/,没有VOL1了
    好像只能重新 oracleasm createdisk,但这是否会导致ASM磁盘中数据丢失啊,影响上面2个数据库(10亿记录,生产环境,数据重要!)

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *