深入了解Oracle ASM(一):基础概念
ASM基础概念
Automatic Storage Management是Oracle 在版本10g中率先(对比其他RDBMS)提出的数据库存储自动解决方案,在版本11g中得到进一步升华。ASM提供了数据库管理所需要的一个简单、有效的存储管理接口,该接口实现了跨服务器和存储平台。 ASM是文件系统filesystem和volume manager卷管理软件的一体化,专门为Oracle的数据库文件锁设计的; ASM在保证如文件系统般管理简单的基础上提供高性能的异步Async IO。ASM的引入提高了数据库的可扩展容量,同时节约了DBA的时间,使其能够更敏捷、更高效地管理一个流动性较大的数据库环境。
ASM的出现是为RDBMS管理文件存储
ASM基础概念:
ASM存储以diskgroups的概念呈现:
ASM所提供的高可用性:
Failure Group镜像的使用
重新平衡Rebalancing
性能方面
其他知识
Disk Group:
Disk Group”磁盘组” 是ASM管理的逻辑概念对象,一个Disk Group由多个ASM disk组成。每一个Disk Group都是子描述的,如同一个标准的文件系统一样。所有关于该Diskgroup 空间使用信息的元数据均完整地包含在这个磁盘组中。 若ASM可以找到所有属于该ASM diskgroup的DISK则他不需要任何其他额外的元数据。
文件空间从Disk Group中分配。任何一个ASM文件总是完整地包含在一个单独的Disk Group中。但是,一个Disk Group可能包含了属于多个数据库的文件,一个单独的数据库的文件也可以存放在多个不同的Disk Group中。 在大多数实际的部署中,不会创建太多数量的Disk Groups,一般在3~4个。
Disk Group提供三种不同的redundancy冗余度,详见上文。
ASM Disk
一个ASM Disk是组成Disk Group的基本的持久的存储。 当一个ASM Disk加入到Disk Group中时,它要么采用管理员指定的ASM Disk Name要么采用系统自动分配的Disk Name。 这不同于OS 给用于访问该设备的”艺名”。 在一个Cluster集群中, 同一个Disk 可能在不同的节点上显示不同的Device Name设备名,例如在 Node1上的 /dev/sdc ,对应于Node2上的/dev/sdd。 ASM Disk必须在所有使用该Disk Group的实例上可用直接磁盘I/O访问。
实际上对于RDBMS Oracle而言访问ASM disk和访问普通的文件并没有什么不同,除非使用了ASMLIB(ASMLIB不是ASM必须的,再次强调!)。常规情况下ASM Disk是OS上可见的LUN的partition,该分区覆盖了所有不被操作系统所保留的磁盘的空间。 大多数操作系统需要保留LUN的第一个block作为分区表(partition table); 由于ASM总是会写ASM Disk的第一个块,所以要保证ASM不会去覆盖前几个block上的分区表(partition table),例如在Solaris上分区时不要把前几个柱面划给partition。LUN可以是简单的物理JBOD,或者是由高级存储阵列管理的虚拟LUN。既可以是直连的设备也可以是SAN。ASM Disk可以是任何被开发系统调用所访问的东西,除了本地文件系统。 甚至于NFS上的文件都可以被当做一个ASM Disk来用,这样便于喜欢NAS的用户使用ASM,当然比起NFS来我更建议干脆用ISCSI。
注意虽然可以使用普通logical Volume Manager LVM管理的logical volume作为ASM Disk,但是这并不是推荐组合,除非你想不到其他更好的办法。 即便你一定要这样用,但是注意也不要在LVM级别做镜像和条带化。
ASM将任何文件以AU大小均匀分布在Disk Group的所有Disk上。每一个ASM Disk均被维护以保持同样的使用比率。这保证同一个Disk Group中的所有Disk的IO负载基本一致。由于ASM在一个Disk Group中的磁盘上的负载均衡,所以为同一个物理磁盘的不同区域划分为2个ASM Disk不会对性能有所影响;而同一个物理磁盘上划分2个不同分区置于不同的2个Disk Group则有效。
当ASM Disk Group启用冗余时单个ASM Disk仅是一个失败单元。对于该ASM Disk的写失败在10g会自动从该Disk Group drop掉该Disk,前提是该Disk的丢失被容许。
Allocation Unit
每一个ASM Disk都被划分为许多个AU allocation units(单个AU 的大小在 1MB ~64MB,注意总是2的次方MB)。而且AU allocation unit也是Disk Group的基本分配单元。一个ASM Disk上的可用空间总是整数倍个AU。在每一个ASM Disk的头部均有一个表,该表的每一条记录代表该ASM Disk上的一个AU。文件的extent指针(pointer)给出了ASM Disk Number磁盘号和AU号,这就描述了该extent的物理位置。由于所有的空间操作都以AU为单位,所以不存在所谓ASM碎片这样的概念和问题。
一个AU(1M~64M)足够小,以便一个文件总是要包含很多个AU,这样就可以分布在很多磁盘上,也不会造成热点。一个AU又足够大以便能够在一个IO操作中访问它,以获得更加的吞吐量,也能提供高效的顺序访问。访问一个AU的时间将更多的消耗在磁盘传输速率上而非花在寻找AU头上。对于Disk Group的重新平衡也是对每一个AU逐次做的。
了解ASM后台进程的作用:
GMON: ASM Diskgroup监控进程
ASMB: ASM后台网络进程
RBAL: ASM reblance master process 重新平衡主进程
ARBx: reblance slave process实际实施reblance的后台进程
MARK: AU resync AU重新同步的指挥家进程
了解ASM前台进程的作用:
ASM的client(主要是RDBMS DB和CRSD))在连接ASM实例时会产生前台进程,前天进程的名字一般为oracle+ASM_<process>_<product> (例如: oracle+ASM_DBW0_DB1)。
OCR 特有的前台进程foreground: oracle+ASM1_ocr
ASM相关的V$和X$视图
X$KFFXP包含了文件、extent和AU之间的映射关系。 从该X$视图可以追踪给定文件的extent的条带化和镜像情况。注意对于primary au和mirror au读操作的负载是均衡的, 而写操作要求同时写2者到磁盘。以下是X$KFFXP视图列的含义
X$KFDAT该X$视图包含了所有allocation unit AU的细节,不管是FREE的还是USED。
X$KFDPARTNER 这个X$视图包含了 disk-partner(1-N)的映射关系,在一个给定ASM Diskgroup,若2个Disk存有同一个extent的镜像拷贝,则将2个disk视作partners。因此partners必须属于同一个diskgroup下的不同的failgroup。
研究ASM必要的技巧
1)找出ASM的镜像mirror extent,在例子中是ASM的spfile
[grid@localhost ~]$ sqlplus / as sysasmSQL*Plus: Release 11.2.0.3.0 Production on Wed Feb 13 11:13:39 2013Copyright (c) 1982, 2011, Oracle. All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit ProductionWith the Automatic Storage Management optionINSTANCE_NAME----------------+ASMSQL> SQL> show parameter spfileNAME TYPE VALUE------------------------------------ ----------- ------------------------------spfile string +SYSTEMDG/asm/asmparameterfile /registry.253.805993079select GROUP_KFFXP, DISK_KFFXP, AU_KFFXP from x$kffxp where number_kffxp = (select file_number from v$asm_alias where name = 'REGISTRY.253.805993079');GROUP_KFFXP DISK_KFFXP AU_KFFXP----------- ---------- ---------- 3 2 38 3 1 39 3 0 44也可以这样定位select GROUP_KFDAT, NUMBER_KFDAT, AUNUM_KFDAT from x$kfdat where fnum_kfdat = (select file_number from v$asm_alias where name = 'REGISTRY.253.805993079')GROUP_KFDAT NUMBER_KFDAT AUNUM_KFDAT----------- ------------ ----------- 3 0 44 3 1 39 3 2 38==> 找到该 DISK对应的路径SQL> select path,DISK_NUMBER from v$asm_disk where GROUP_NUMBER=3 and disk_number in (0,1,2);PATH DISK_NUMBER-------------------- -----------/dev/asm-diski 2/dev/asm-diskh 1/dev/asm-diskg 0SQL> create pfile='/home/grid/pfile' from spfile;File created.SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit ProductionWith the Automatic Storage Management option[grid@localhost ~]$ cat pfile +ASM.asm_diskgroups='EXTDG','NORDG'#Manual Mount*.asm_diskstring='/dev/asm*'*.asm_power_limit=1*.diagnostic_dest='/g01/app/grid'*.instance_type='asm'*.large_pool_size=12M*.local_listener='LISTENER_+ASM'*.remote_login_passwordfile='EXCLUSIVE'通过dd读取该AU [grid@localhost ~]$ dd if=/dev/asm-diski of=/tmp/spfile.dmp skip=38 bs=1024k count=11+0 records in1+0 records out1048576 bytes (1.0 MB) copied, 0.00328614 seconds, 319 MB/s[grid@localhost ~]$ strings /tmp/spfile.dmp +ASM.asm_diskgroups='EXTDG','NORDG'#Manual Mount*.asm_diskstring='/dev/asm*'*.asm_power_limit=1*.diagnostic_dest='/g01/app/grid'*.instance_type='asm'*.large_pool_size=12M*.local_listener='LISTENER_+ASM'*.remote_login_passwordfile='EXCLUSIVE'[grid@localhost ~]$ dd if=/dev/asm-diskh of=/tmp/spfile1.dmp skip=39 bs=1024k count=1 1+0 records in1+0 records out1048576 bytes (1.0 MB) copied, 0.0325114 seconds, 32.3 MB/s[grid@localhost ~]$ strings /tmp/spfile1.dmp +ASM.asm_diskgroups='EXTDG','NORDG'#Manual Mount*.asm_diskstring='/dev/asm*'*.asm_power_limit=1*.diagnostic_dest='/g01/app/grid'*.instance_type='asm'*.large_pool_size=12M*.local_listener='LISTENER_+ASM'*.remote_login_passwordfile='EXCLUSIVE'[grid@localhost ~]$ dd if=/dev/asm-diskg of=/tmp/spfile2.dmp skip=44 bs=1024k count=11+0 records in1+0 records out1048576 bytes (1.0 MB) copied, 0.0298287 seconds, 35.2 MB/s[grid@localhost ~]$ strings /tmp/spfile2.dmp +ASM.asm_diskgroups='EXTDG','NORDG'#Manual Mount*.asm_diskstring='/dev/asm*'*.asm_power_limit=1*.diagnostic_dest='/g01/app/grid'*.instance_type='asm'*.large_pool_size=12M*.local_listener='LISTENER_+ASM'*.remote_login_passwordfile='EXCLUSIVE'
2) 显示asm disk failure group和 disk partners的映射关系:
1* select DISK_NUMBER,FAILGROUP,path from v$asm_disk where group_number=3SQL> /DISK_NUMBER FAILGROUP PATH----------- ------------------------------ -------------------- 3 SYSTEMDG_0003 /dev/asm-diskj 2 SYSTEMDG_0002 /dev/asm-diski 1 SYSTEMDG_0001 /dev/asm-diskh 0 SYSTEMDG_0000 /dev/asm-diskgSQL> select disk,NUMBER_KFDPARTNER,DISKFGNUM from X$KFDPARTNER where grp=3; DISK NUMBER_KFDPARTNER DISKFGNUM---------- ----------------- ---------- 0 1 1 0 2 1 0 3 1 1 0 2 1 2 2 1 3 2 2 0 3 2 1 3 2 3 3 3 0 4 3 1 4 3 2 412 rows selected.
任何转载请注明源地址,否则追究法律责任!:http://www.askmaclean.com/archives/know-oracle-asm.html
相关文章链接:
Asm Instance Parameter Best Practice
为什么RHEL 6上没有ASMLIB?
Unix上如何查看文件名开头为”+asm”的TRACE文件
asm_power_limit对IO的影响
针对11.2 RAC丢失OCR和Votedisk所在ASM Diskgroup的恢复手段
10g ASM lost disk log
11gR2 RAC ASM启动揭秘
在11gR2 RAC中修改ASM DISK Path磁盘路径
在Linux 6上使用UDEV解决RAC ASM存储设备名问题
Script:找出ASM中的Spfile参数文件
如何诊断ASMLIB故障
Script:收集ASM诊断信息
Comparation between ASM note [ID 373242.1] and note [ID 452924.1]
Why ASMLIB and why not?
ASM file metadata operation等待事件
几个关于oracle 11g ASM的问题
利用UDEV服务解决RAC ASM存储设备名
Discover Your Missed ASM Disks
Oracle内部视图X$KFFXP
Fixed X$ Tables in ASM
了解AMDU工具生成的MAP文件
使用AMDU工具从无法MOUNT的DISKGROUP中抽取数据文件
ASM常见问题, FAQ:
Q:ASM做 rebalance和 mirror 的基本颗粒是什么?
A: ASM做mirror 镜像的基本颗粒是file的extent,默认情况下一个extent等于一个AU,11g之后一个extent可以是1 or 8 or 64个AU
ASM做rebalance重新平衡的基本颗粒也是extent,虽然重新平衡是对每一个AU逐次做的。
Q:ASMLIB和ASM的关系是什么?
A:ASMLIB是一种种基于Linux module,专门为Oracle Automatic Storage Management特性设计的内核支持库(kernel support library)。
简单来说ASMLIB是一种Linux下的程序包,它不属于Oracle ASM kernel。 通过ASMLIb可以做到设备名绑定,便于ASM使用的目的; 但是Linux上能实现设备名绑定并便于ASM使用的服务有很多,例如udev、mpath等;
所以ASMLIB并不是ASM必须的组件; 国内的中文文章对于该概念的描述大多不清晰,造成了ASMLIB=ASM或者ASM必须用ASMLIB的误解,这是以讹传讹。
ASMLIB的缺点见拙作《Why ASMLIB and why not?》一文
Q: ASM是否是raid 10或者raid 01?
A:ASM的mirror是基于file extent的,而不是像raid那样基于disk或者block。 所以ASM既不同于Raid 10,也不是Raid 01。 如果硬要说相似点的话,因为ASM是先mirror镜像后stripe条带化,所以在这个特征上更像Raid 10。 但是注意,再次强调,ASM既不是RAID 10也不是RAID 01, 重复一千遍。。。。。。。。。。。。。
TO BE Continued………………. 8-)