1、ASM 冷区和热区介绍
我们在使用asm磁盘组存放数据的时候,可能没有过多关注过这个冷区和热区的东西,这个是什么呢?相当于我们可以把数据指定的存放到磁盘的内圈或者外圈上;外圈就是磁盘的最外面,我们可以理解为热区,读和写更快;内圈磁盘最里面,读写相对慢一些;那么热区和冷区的数据存放是通过什么机制来实现的额?实际上还是磁盘组的模版;set line 200set pages 2222col diskgroup for a10col name for a60col value for a20SELECT dg.name AS diskgroup, a.name AS name,a.value AS value, read_only,system_created FROM V$ASM_DISKGROUP dg,V$ASM_ATTRIBUTE aWHERE 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 YWX template.OCRFILE.redundancy 18 N YWX template.OCRFILE.primary_region 0 N YWX template.OCRFILE.mirror_region 0 N YWX template.PARAMETERFILE.stripe 0 N YWX template.PARAMETERFILE.redundancy 18 N YWX template.PARAMETERFILE.primary_region 0 N YWX 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_hotattribute (hotmirrorhot);这里可以指定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 YWX template.DATAFILE_HOT.redundancy 18 N YWX template.DATAFILE_HOT.primary_region 1 N YWX template.DATAFILE_HOT.mirror_region 1 N Y--通过上面可以看到value=1,表示如果使用这个模版创建文件的话就是存放到热区里面;--指定模板创建表空间(不加,默认会去使用datafile的模板)create tablespace wx_hot datafile '+wx(datafile_hot)' size 12m;--继续查看现有文件存放的区域set line 250col diskgroup for a10set pages 2000SELECT 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_writesFROM V$ASM_DISKGROUP dg, V$ASM_FILE fWHERE 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.2c.指定模板的方式创建文件
3、ASM 冷区的数据变更到热区
比如现有的磁盘组中已经有数据存放着,现在要想冷区的数据迁移到热区,怎么处理?a.修改磁盘组数据文件的模版b.reblance磁盘组c.查看reblance后磁盘组存放的情况--修改datafile模板alter diskgroup wx modify template datafileattribute (hotmirrorhot);--确认修改:DISKGROUP NAME VALUE READ_ONLY SYSTEM_CREATED---------- ------------------------------------------------------------ -------------------- -------------- --------------WX template.DATAFILE.stripe 0 N YWX template.DATAFILE.redundancy 18 N YWX template.DATAFILE.primary_region 1 N YWX 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 200col diskgroup_name for a15col disk_name for a10col path for a40select 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_gbfrom 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.PATHFROM x$kffxp x, v$asm_disk_stat dWHERE x.group_kffxp=d.group_numberand x.disk_kffxp=d.disk_numberand x.number_kffxp=8ORDER BY 1, 2;

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

以上结果显示每个磁盘的所有空间都被分配在了冷区中。下面使用kfed工具进一步查看。[root@hisdb01 ~]# kfed read dev/asmdisk6 aun=50 aus=1048576|morekfbh.endian: 1 ; 0x000: 0x01kfbh.hard: 130 ; 0x001: 0x82kfbh.type: 26 ; 0x002: KFBTYP_USEDSPCkfbh.datfmt: 1 ; 0x003: 0x01kfbh.block.blk: 0 ; 0x004: blk=0kfbh.block.obj: 8 ; 0x008: file=8kfbh.check: 18516506 ; 0x00c: 0x011a8a1akfbh.fcn.base: 3059 ; 0x010: 0x00000bf3kfbh.fcn.wrap: 0 ; 0x014: 0x00000000kfbh.spare1: 0 ; 0x018: 0x00000000kfbh.spare2: 0 ; 0x01c: 0x00000000kfdusde[0].used[0].spare: 0 ; 0x000: 0x00000000kfdusde[0].used[0].hi: 0 ; 0x004: 0x00000000kfdusde[0].used[0].lo: 992 ; 0x008: 0x000003e0kfdusde[0].used[1].spare: 0 ; 0x00c: 0x00000000kfdusde[0].used[1].hi: 0 ; 0x010: 0x00000000kfdusde[0].used[1].lo: 0 ; 0x014: 0x00000000kfdusde[1].used[0].spare: 0 ; 0x018: 0x00000000kfdusde[1].used[0].hi: 0 ; 0x01c: 0x00000000kfdusde[1].used[0].lo: 0 ; 0x020: 0x00000000kfdusde[1].used[1].spare: 0 ; 0x024: 0x00000000kfdusde[1].used[1].hi: 0 ; 0x028: 0x00000000kfdusde[1].used[1].lo: 0 ; 0x02c: 0x00000000...磁盘组fra只有一个磁盘,只有一个条目被占用,并且每个磁盘的已分配的所有空间确实都被分配到了冷区。上面的kfdusde[*],每个条目代表一个磁盘,磁盘组中有几个磁盘,这里就有几个;
创建一个热区的模版,然后再创建一个表空间到这个热区;sqlplus as sysasmALTER 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 sysdbacreate 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_statORDER 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_statORDER BY 1;



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




