暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ASM虚拟元数据-hot and cold area asm file 8

1、ASM 冷区和热区介绍

    我们在使用asm磁盘组存放数据的时候,可能没有过多关注过这个冷区和热区的东西,
    这个是什么呢?相当于我们可以把数据指定的存放到磁盘的内圈或者外圈上;
    外圈就是磁盘的最外面,我们可以理解为热区,读和写更快;内圈磁盘最里面,读写相对慢一些;


    那么热区和冷区的数据存放是通过什么机制来实现的额?实际上还是磁盘组的模版;


    set line 200
    set pages 2222
    col diskgroup for a10
    col name for a60
    col value for a20
    SELECT dg.name AS diskgroup, a.name AS name,
    a.value AS value, read_only,system_created FROM V$ASM_DISKGROUP dg,
    V$ASM_ATTRIBUTE a
    WHERE dg.name = 'WX'
    and a.name like 'template.%'
    AND dg.group_number = a.group_number;


    DISKGROUP NAME VALUE READ_ONLY SYSTEM_CREATED
    ---------- ------------------------------------------------------------ -------------------- -------------- --------------
    WX template.OCRFILE.stripe 0 N Y
    WX template.OCRFILE.redundancy 18 N Y
    WX template.OCRFILE.primary_region 0 N Y
    WX template.OCRFILE.mirror_region 0 N Y
    WX template.PARAMETERFILE.stripe 0 N Y
    WX template.PARAMETERFILE.redundancy 18 N Y
    WX template.PARAMETERFILE.primary_region 0 N Y
    WX template.PARAMETERFILE.mirror_region 0 N Y
    ...
    --上面展示 两种文件类型OCFFILE和PARAMETERFILE参数文件的模版,这些模板针对每个文件类型都有4各参数,细粒度、冗余级别、主区存放冷热位置、镜像区存放冷热位置
    --value 为0代表是冷区,他也是默认值,为1表示是热区;
    复制

    2、ASM 热区使用

      --修改asm和rdbms的兼容性为11.2以上;
      alter diskgroup wx set attribute 'compatible.asm'='11.2';
      alter diskgroup wx set attribute 'compatible.rdbms'='11.2';


      --添加一种热区的模版
      alter diskgroup wx add template datafile_hot
      attribute (
      hot
      mirrorhot);


      这里可以指定Template格式:hot/mirrorhot 或者 cold/mirrorcold。


      --验证template:
      select group_number,name,state from v$asm_diskgroup;
      select * from v$asm_attribute where name like 'template%DATAFILE_HOT%' and group_number=4 order by 1;
      DISKGROUP NAME VALUE READ_ONLY SYSTEM_CREATED
      ---------- ------------------------------------------------------------ -------------------- -------------- --------------
      ...
      WX template.DATAFILE_HOT.stripe 0 N Y
      WX template.DATAFILE_HOT.redundancy 18 N Y
      WX template.DATAFILE_HOT.primary_region 1 N Y
      WX template.DATAFILE_HOT.mirror_region 1 N Y
      --通过上面可以看到value=1,表示如果使用这个模版创建文件的话就是存放到热区里面;


      --指定模板创建表空间(不加,默认会去使用datafile的模板)
      create tablespace wx_hot datafile '+wx(datafile_hot)' size 12m;


      --继续查看现有文件存放的区域
      set line 250
      col diskgroup for a10
      set pages 2000
      SELECT dg.group_number,dg.name AS diskgroup,
      f.file_number,
      f.primary_region,
      f.mirror_region,
      f.hot_reads,
      f.hot_writes,
      f.cold_reads,
      f.cold_writes
      FROM V$ASM_DISKGROUP dg, V$ASM_FILE f
      WHERE dg.group_number = f.group_number AND dg.name = 'WX'; --只查询这个磁盘组文件


      GROUP_NUMBER DISKGROUP FILE_NUMBER PRIMARY_ MIRROR_R HOT_READS HOT_WRITES COLD_READS COLD_WRITES
      ------------ ---------- ----------- -------- -------- ---------- ---------- ---------- -----------
      4 WX 256 COLD COLD 0 0 30 264--冷区读写
      4 WX 257 HOT HOT 3 256 0 0 --热区读写


      上述步骤总结:
      a.创建diskgroup的模板
      b.检查和修改compatible.rdbms\compatible.asm >11.2
      c.指定模板的方式创建文件
      复制

      3、ASM 冷区的数据变更到热区

        比如现有的磁盘组中已经有数据存放着,现在要想冷区的数据迁移到热区,怎么处理?
        a.修改磁盘组数据文件的模版
        b.reblance磁盘组
        c.查看reblance后磁盘组存放的情况


        --修改datafile模板
        alter diskgroup wx modify template datafile
        attribute (
        hot
        mirrorhot);




        --确认修改:
        DISKGROUP NAME VALUE READ_ONLY SYSTEM_CREATED
        ---------- ------------------------------------------------------------ -------------------- -------------- --------------
        WX template.DATAFILE.stripe 0 N Y
        WX template.DATAFILE.redundancy 18 N Y
        WX template.DATAFILE.primary_region 1 N Y
        WX template.DATAFILE.mirror_region 1 N Y


        --执行rebalance动作
        alter diskgroup wx rebalance power 1024;
        复制

        4、ASM 元数据存放的位置介绍

          * ASM元信息8号文件是磁盘空间使用目录Used Space Directory,简称USD,它记录了每个ASM磁盘组中每个磁盘的每个zone上被使用的AU数。
          一个磁盘额区包含冷区和热区,usd目录为每个磁盘一共了一个条目,记录了这2个区的au使用数量;
          复制


          5、定位usd目录

            set line 200
            col diskgroup_name for a15
            col disk_name for a10
            col path for a40
            select a.GROUP_NUMBER,a.name diskgroup_name,a.type,a.allocation_unit_size/1024/1024 unit_mb,a.voting_files,b.name disk_name,b.path,
            b.os_mb/1024 as os_gb,b.total_mb/1024 as total_gb,b.free_mb/1024 as free_gb
            from v$asm_diskgroup a,v$asm_disk b where a.group_number=b.group_number;
            复制

              break on Group#
              SELECT d.group_number "Group#",
              x.disk_kffxp "Disk#",
              x.xnum_kffxp "Extent",
              x.au_kffxp "AU",
              d.name "Disk name",d.PATH
              FROM x$kffxp x, v$asm_disk_stat d
              WHERE x.group_kffxp=d.group_number
              and x.disk_kffxp=d.disk_number
              and x.number_kffxp=8
              ORDER BY 1, 2;
              复制

                检查所有磁盘组中每个磁盘已经使用空间的分配情况。
                SELECT group_number "Group#",
                name "Disk name",
                hot_used_mb "Hot (MB)",
                cold_used_mb "Cold (MB)"
                FROM v$asm_disk_stat
                ORDER BY 1;
                复制

                  以上结果显示每个磁盘的所有空间都被分配在了冷区中。下面使用kfed工具进一步查看。


                  [root@hisdb01 ~]# kfed read dev/asmdisk6 aun=50 aus=1048576|more
                  kfbh.endian: 1 ; 0x000: 0x01
                  kfbh.hard: 130 ; 0x001: 0x82
                  kfbh.type: 26 ; 0x002: KFBTYP_USEDSPC
                  kfbh.datfmt: 1 ; 0x003: 0x01
                  kfbh.block.blk: 0 ; 0x004: blk=0
                  kfbh.block.obj: 8 ; 0x008: file=8
                  kfbh.check: 18516506 ; 0x00c: 0x011a8a1a
                  kfbh.fcn.base: 3059 ; 0x010: 0x00000bf3
                  kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
                  kfbh.spare1: 0 ; 0x018: 0x00000000
                  kfbh.spare2: 0 ; 0x01c: 0x00000000
                  kfdusde[0].used[0].spare: 0 ; 0x000: 0x00000000
                  kfdusde[0].used[0].hi: 0 ; 0x004: 0x00000000
                  kfdusde[0].used[0].lo: 992 ; 0x008: 0x000003e0
                  kfdusde[0].used[1].spare: 0 ; 0x00c: 0x00000000
                  kfdusde[0].used[1].hi: 0 ; 0x010: 0x00000000
                  kfdusde[0].used[1].lo: 0 ; 0x014: 0x00000000
                  kfdusde[1].used[0].spare: 0 ; 0x018: 0x00000000
                  kfdusde[1].used[0].hi: 0 ; 0x01c: 0x00000000
                  kfdusde[1].used[0].lo: 0 ; 0x020: 0x00000000
                  kfdusde[1].used[1].spare: 0 ; 0x024: 0x00000000
                  kfdusde[1].used[1].hi: 0 ; 0x028: 0x00000000
                  kfdusde[1].used[1].lo: 0 ; 0x02c: 0x00000000
                  ...
                  磁盘组fra只有一个磁盘,只有一个条目被占用,并且每个磁盘的已分配的所有空间确实都被分配到了冷区。上面的kfdusde[*],每个条目代表一个磁盘,磁盘组中有几个磁盘,这里就有几个;
                  复制


                    创建一个热区的模版,然后再创建一个表空间到这个热区;
                    sqlplus as sysasm
                    ALTER DISKGROUP DATA SET ATTRIBUTE 'compatible.asm' = '11.2.0.0.0';
                    ALTER DISKGROUP DATA SET ATTRIBUTE 'compatible.rdbms' = '11.2.0.0.0';
                    alter diskgroup data add template hotfile attributes(hot);
                    --这个特性需要磁盘组compatible.asm属性设置为11.2或者以上


                    sqlplus as sysdba
                    create tablespace t_hot datafile '+data(hotfile)' size 50m;


                    再次查询上面的语句,检查空间使用:
                    SELECT group_number "Group#",
                    name "Disk name",
                    hot_used_mb "Hot (MB)",
                    cold_used_mb "Cold (MB)"
                    FROM v$asm_disk_stat
                    ORDER BY 1;
                    复制

                      以上结果显示,51MB的空间(文件本身占用50MB,1MB用于文件头)被分配在热区,并且分布在磁盘组的所有磁盘中。


                      我们还可以将一个已经存在的数据文件移到热区,我们来通过asmcmd里的find命令找到磁盘组DATA里的所有数据文件:


                      [grid@hisdb01 ~]$ asmcmd find --type datafile +DATA "*"
                      +DATA/ORCL/DATAFILE/LS.271.1142605687
                      +DATA/ORCL/DATAFILE/SYSAUX.257.1030194853
                      +DATA/ORCL/DATAFILE/SYSTEM.256.1030194853
                      +DATA/ORCL/DATAFILE/TEST.268.1136905473
                      +DATA/ORCL/DATAFILE/TEST1.269.1136906361
                      +DATA/ORCL/DATAFILE/T_HOT.275.1143046051
                      +DATA/ORCL/DATAFILE/UNDOTBS1.258.1030194853
                      +DATA/ORCL/DATAFILE/UNDOTBS2.264.1030194957
                      +DATA/ORCL/DATAFILE/USERS.259.1030194853
                      +DATA/ORCL/DATAFILE/WW.272.1142605703
                      +DATA/ORCL/DATAFILE/ZS.270.1142605657
                      +DATA/ORCL/DATAFILE/ls.dbf
                      +DATA/ORCL/DATAFILE/test.dbf
                      +DATA/ORCL/DATAFILE/test02.dbf
                      +DATA/ORCL/DATAFILE/ww.dbf


                      现在我们把LS表空间的数据文件移入热区。


                      SQL> alter diskgroup DATA modify file '+DATA/ORCL/DATAFILE/LS.271.1142605687' attributes (HOT);
                      这个命令会触发一次磁盘组DATA的rebalance,因为文件的extent都需要移动到磁盘的热区。当rebalance结束时,查询发现热区的数据增多了。
                      译者注:虽然说是磁盘组的rebalance,但是速度上会比较快,只取决于该文件的大小,因为其他文件本身已经是rebalance状态,只需要做一次快速的检查即可,并没有真正的大量的extent需要做移动。


                      再次查询上面的语句,检查空间使用:
                      SELECT group_number "Group#",
                      name "Disk name",
                      hot_used_mb "Hot (MB)",
                      cold_used_mb "Cold (MB)"
                      FROM v$asm_disk_stat
                      ORDER BY 1;
                      复制

                      文章转载自数据库技术加油站,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                      评论