理解Extents,Allocation Units,Types and Templates
ASM文件被细分成extents,extents又进一步被细分成allocation units(AU)。和ASSM管理表空间中extents类似,ASM的extents随着数据文件的增长大小也不是固定大小。可变大小的extent需要磁盘组的兼容设置至少为11.1
存储在ASM中文件的属性由文件的类型(映射为模板)决定。模板,简单来说,决定了ASM文件的存储特性,包括冗余度(通常基于磁盘组的冗余级别设置),条带类型(粗粒度/细粒度),以及文件类型。我本机上外部冗余磁盘组+DATA中的模板如下:
SQL> select redundancy,stripe,name,primary_region,mirror_region
2 from v$asm_template
3 /
REDUND STRIPE NAME PRIM MIRR
------ ------ ------------------------------ ---- ----
UNPROT COARSE PARAMETERFILE COLD COLD
UNPROT COARSE ASMPARAMETERFILE COLD COLD
UNPROT COARSE ASMPARAMETERBAKFILE COLD COLD
UNPROT COARSE DUMPSET COLD COLD
UNPROT FINE CONTROLFILE COLD COLD
UNPROT COARSE FLASHFILE COLD COLD
UNPROT COARSE ARCHIVELOG COLD COLD
UNPROT COARSE ONLINELOG COLD COLD
UNPROT COARSE DATAFILE COLD COLD
UNPROT COARSE TEMPFILE COLD COLD
UNPROT COARSE BACKUPSET COLD COLD
UNPROT COARSE AUTOBACKUP COLD COLD
UNPROT COARSE XTRANSPORT COLD COLD
UNPROT COARSE CHANGETRACKING COLD COLD
UNPROT COARSE FLASHBACK COLD COLD
UNPROT COARSE DATAGUARDCONFIG COLD COLD
UNPROT COARSE OCRFILE COLD COLD
UNPROT COARSE OCRBACKUP COLD COLD
UNPROT COARSE ASM_STALE COLD COLD
19 rows selected.
控制文件用的是细粒度条带,在磁盘上冷区存储。(在Intelligent Data Placement一节会进一步了解ASM磁盘组冷、热区的概念)
为了改变文件的特性,可以创建属于自己的模板。比如,为了把文件显示的放置到磁盘组的热区,可以进行如下的操作:
SQL> alter diskgroup data
2 add template allhot attributes(hot);
alter diskgroup data
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15283: ASM operation requires compatible.rdbms of 11.2.0.0.0 or higher
遇到了ORA-15283错误,为DATA磁盘组设置compatible.rdbms为11.2后,创建模板成功
SQL> alter diskgroup data set attribute 'compatible.rdbms'='11.2';
Diskgroup altered.
SQL> alter diskgroup data
2 add template allhot attributes(hot);
Diskgroup altered.
外部冗余的磁盘组不能定义镜像数据块的放置区域(因为没有镜像),查询v$asm_templete可以发现新建的模板allhot的SYSTEM列设置为“N”(因为是用户创建的)
SQL> select redundancy,stripe,name,primary_region,mirror_region,system
2 from v$asm_template
3 where name = 'ALLHOT'
4 /
REDUND STRIPE NAME PRIM MIRR S
------ ------ ------------------------------ ---- ---- -
UNPROT COARSE ALLHOT HOT COLD N
下面是创建表空间时使用新建模板的例子:
SQL> create tablespace hottbs datafile '+DATA(allhot)' size 10M;
Tablespace created.
查看一下新建文件的信息
SQL> select file_name from dba_data_files ---->RDBMS实例上
2 where tablespace_name = 'HOTTBS';
FILE_NAME
--------------------------------------------------
+DATA/rac/datafile/hottbs.268.821038331
SQL> select bytes,type,redundancy,primary_region,mirror_region,
2 hot_reads,hot_writes,cold_reads,cold_writes
3 from v$asm_file where file_number = 268
4 /
BYTES TYPE REDUND PRIM MIRR HOT_READS HOT_WRITES COLD_READS COLD_WRITES
---------- ---------- ------ ---- ---- ---------- ---------- ---------- -----------
10493952 DATAFILE UNPROT HOT COLD 1 0 0 0
冗余
ASM磁盘组有3种冗余:
1、外部冗余, 没有镜像操作。磁盘组使用操作系统或者存储阵列上的保护措施,比如RAID或LVMs。这种情况下就需要管理员确保底层的存储被正确的配置,ASM本身并不能保证失败时的数据恢复。使用外部冗余不需要设置故障组
2、正常冗余,这个是ASM的默认选项,实现两路镜像,也就是说每个文件extent会被写入两个磁盘组中(一个是主extent,另一个是镜像的extent)。您必须定义至少两个故障组来实现这个冗余级别
3、高度冗余,此级别实现三路镜像,每个文件extent被写入到三个磁盘组中(一个主extent,两个镜像的extent),这个级别需要至少三个故障组
根据作者的经验,大部分的ASM部署都使用外部冗余。大多数企业用存储阵列自带的保护机制来应对磁盘损坏,当一个磁盘组中的磁盘损坏时,存储管理员会去替换掉坏的磁盘(通常在ASM管理员发现这个问题之前就已经完成了)。CERN(The Centre for Nuclear Research)是少数使用正常冗余磁盘组的例子,这样可以减少在存储阵列上的花费,性能和用户体验也是不错的
条带化
ASM会在磁盘组中的磁盘上条带化文件,以此来优化IO性能。这就要求磁盘组中的每个磁盘都有相同的类型和性能特性。ASM有两种条带类型
大多数文件都是用粗粒度条带,如数据库文件,可传输表空间文件,备份集,dump集,自动备份的控制文件,更改跟踪文件,Data Guard配置文件等。粗粒度条带的大小由AU的大小决定。当把RDBMS和ASM的兼容性设置为11.1时,粗粒度条带可以使用可变大小的extent,最开始20000个extents的大小和AU相等,接下来20000个extents的大小是4倍的AU,再接下来会是16倍的AU。
默认情况下,细粒度条带只用在控制文件,在线重做日至和闪回日志。条带大小是128KB。默认每个文件生成8个条带,所以磁盘组中磁盘的数目最好是8的倍数