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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
852次阅读
2025-03-17 11:33:53
金仓数据库26套!宁波市司法局信息系统适配改造(一期)采购项目
天下观查
337次阅读
2025-03-21 10:33:59
国产化+性能王炸!这套国产方案让 3.5T 数据 5 小时“无感搬家”
YMatrix
321次阅读
2025-03-13 09:51:26
大连农商40万,采购Greenplum数据库原厂订阅服务
天下观查
289次阅读
2025-03-13 09:52:29
记一次oracle rac 一个节点load averge高导致的问题
Digital Observer
249次阅读
2025-03-13 10:13:43
替换OCR磁盘组导致集群无法启动
zwtian
247次阅读
2025-03-12 09:00:16
国产数据库高光时刻!天翼云TeleDB荣登TPC-DS全球测评总榜第二
天翼云开发者社区
193次阅读
2025-03-13 17:24:48
为什么总是很难客观评价某个国产数据库产品
白鳝的洞穴
188次阅读
2025-03-19 11:21:09
最近我为什么不写评论国产数据库的文章了
白鳝的洞穴
181次阅读
2025-04-07 09:44:54
史诗级革新 | Apache Flink 2.0 正式发布
严少安
171次阅读
2025-03-25 00:55:05