云和恩墨大讲堂--ASM详解

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

ASM自动存储管理技术经历多个年头,目前已经广泛使用于各个领域的数据库存储解决方案。谈到ASM相信大家可能会参杂着熟悉而陌生的感觉,熟悉在于目前大家使用的11grac中基本都是使用ASM,陌生在于大家平时可能只是基本的使用,对asm了解并不全面,例如:数据库实例是怎么和asm交互和分工的、ASM存在哪些特性、数据库各种文件是怎样放于asm存储中、它的元数据怎么存放等等。开始接下来我带大家重新全面认识ASM:Oracle10g之前,存储设备的使用情况(在UNIX或者LINUX环境中)如下:操作系统上安装逻辑卷管理器(LVM);通过LVM将多个磁盘做成卷组;在卷组上划分逻辑卷(logicalvolume);在逻辑卷上创建文件系统;Rac环境下需要第三方共享集群软件。1、Oracle10g之后引入的专用文件系统ASM,为数据库文件的管理提供了很好的支持;2、DBA能够完全在Oracle框架内执行许多任务。利用ASM来将一组磁盘转换成一个高可伸缩的和高性能的文件系统/卷管理器;3、磁盘组提供了直接作为原始设备来访问这个空间,并仍提供文件系统的便利性和灵活性的好处。RAC环境下的asm结构:ASM的出现是为RDBMS管理文件存储1、ASM中的适合存放文件类型包括:数据文件datafile、控制文件controlfile、重做日志redolog、归档日志archivelog、闪回日志flashbacklog、spfile、RMAN备份以及blocktrackingfile、datapump文件2、注意ASM不会替代RDBMS去实施IO读写,很多对这一点存在误解,认为RDBMS发送IOrequest给ASM,ASM去做真正的IO操作,这是错误的。3、ASM只负责将存储空间地址返回给RDBMS,真正的IO还是由RDBMS进程去完成,和不用ASM的裸设备一样4、因此ASM不是IO的中间层,也就不存在因为ASM而出现所谓的IO瓶颈ASM实例ASMinstance的主要任务之一就是管理ASMmetadata元数据。ASMInstance在10.2中使用与RDBMS一样的2进制软件,到11.2中分开独立实例,它类似于ORACLERDBMSINSTANCE有其SGA和大多数主要后台进程。ASM实例中的SGA分为四个主要区域,如图所示:共享池:用于元数据信息大型池:用于并行操作ASM高速缓存:用于在重新平衡操作期间读取和写入块空闲内存:可用的未分配内存ARCn:归档进程CKPT:检查点进程DBWn:数据库写进程DIAG:诊断进程Jnnn:作业队列进程LGWR:日志写进程PMON:进程监视器进程PSP0:进程衍生进程QMNn:队列监视器进程RECO:恢复器进程SMON:系统监视器进程VKTM:虚拟计时器进程对于ASM实例,这些进程执行的任务和数据库实例中的不同。例如:ASM实例的SGA中不包含日志缓冲区,该实例也不使用联机重做日志。ASM实例中的LGWR进程将事件记录信息复制到ASM磁盘组。如果ASM是以集群方式建立的,则将在ASM实例中运行与集群管理相关的附加进程。其中一些进程如下所示:LMON:全局入队服务监视器进程LMDn:全局入队服务守护程序LMSn:全局高速缓存服务进程LCKn:锁定进程始化参数ASM实例由参数文件控制,通常设置的参数包括:1、ASM_POWER_LIMITE:默认为1,表示ASM磁盘组在进行rebalance时的并行度,取值从1到11。2、ASM_DISKSTRING是一个与操作系统相关的值,ASM使用它来限制搜索时考虑的磁盘集。默认值为空字符串,这在大多数情况下就足够了。如上所示的约束性更强的值可以减少ASM执行搜索所需的时间,从而提高磁盘组装载次数。3、ASM_DISKGROUP表示启动实例时,自动mount那些磁盘组,可以写多个磁盘组名。4、MEMORY_TARGET实例默认启用自动内存管理,即使未明确设置MEMORY_TARGET参数也是如此。该参数建议设置不小于1536MB,Oracle11.2.0.3版本以后,ASM实例SGA组件内存需求增大,设置过小会引发ORA-04031导致ASM实例crash的问题。数据库实例与ASM之间的交互例如一个数据文件的创建,数据库实例与ASM实例是怎么交互分工来完成的?如图以下文件创建过程如下所示:1、用户在RDBMS发出createfile命令,RDBMS会发起一个与ASM实例的连接,RDBMS端这个连接是ASMB后台进程,而ASM端则是个前台进程,接着创建文件的指令通过这连接提交给ASM实例。2、ASM实例根据创建文件指令,从磁盘中分配AU;ASM会根据指令中指定的template(模板)或diskgroup默认的template来决定文件的冗余、条带策略。3、AU分配完成后,ASM就把文件的extentmap发送给rdbms。4、RDBMS发起IO操作,初始化这个ASM文件。5、初始化完成后,RDBSM向ASM发送commit请求。ASM把相应的allocationtable、filedirectory、aliasdirectory异步写回磁盘6、提交确认会隐式关闭该文件。将来发生I/O时,数据库实例需要重新打开该文件。--数据库实例如何连接到ASM好像经常有人问,数据库实例使用ASM作为存储,只需要在文件名中加上磁盘组名就可以,而数据库实例中没有任何有关ASM的静态配置,那是怎么找ASM实例磁盘组的?其实ASM实例挂载一个磁盘组后,ASM会把diskgroupname、asminstancename、oraclehomepath等信息注册到CSS,当数据库实例尝试打开或者创建名字以“+”开头的文件时,它会通过CSS来查看diskgroup和mount该DG的ASM实例的信息,再通过css中这些信息构造connectstring连接ASM实例的。磁盘组、磁盘、AU、ASMFILE、EXTENTMAPAsm概念图如下:磁盘组一个DiskGroup由多个ASMdisk组成。该Diskgroup空间使用信息的元数据均完整地包含在这个磁盘组中。通过v$asm_diskgroup视图查看磁盘组信息:我们可看到group_numebr磁盘组号有1、2分为name磁盘组CRS和DATA,blocak_size磁盘组的元数据块大小4K,AU大小为1MB,STATE状态为CONNECTED说明有数据库实例连接使用、type冗余类型为外部冗余,总容量和空闲容量。磁盘组冗余有三种选择:ExternalRedundancy没有FailureGroup,不提供任何镜像Normalredundancy要求至少2个FailureGroup,默认支持双向镜像HighRedundancy要求3个FailureGroup,默认支持三向镜像ASMDisk对于ASM而言LUNDISK可以是裸设备也可以直接是块设备(10.2.0.2以后)通过v$asm_diskg视图查看磁盘信息:我们可以看到有4个asmdisk,/dev/raw/raw1属于diskgroup1,/dev/raw/raw2、/dev/raw/raw3属于diskgroup2,而/dev/raw/raw4不属于任何组,它的group_numer为0,header_status为CANDIDATE通常不建议使用ASMLIB创建asm磁盘,缺点:1、对于多路径设备(multipathing)需要配置ORACLEASM_SCANORDER及ORACLEASM_SCANEXCLUDE;2、因为ASMINSTANCE使用ASMLIB提供的asmdisk,所以增加了额外的层面;3、不是每版本LinuxKernel都支持ASMLIB;4、使用ASMLIB意味着要花费更多时间去创建和维护。AllocationUnitAUallocationunit是DiskGroup的基本分配单元。一个ASMDisk上的可用空间总是整数倍个AU。在每一个ASMDisk的头部均有一个表,该表的每一条记录代表该ASMDisk上的一个AU。ASM文件ASM文件由一组分配单元组成,这些文件只属于某个磁盘组,不可跨越磁盘组。每个ASM文件都具有唯一的系统生成的名称。ASM中可以存放数据文件,日志文件,控制文件,归档日志等等。ExtentMaps区映射是asm文件的extent指针(pointer)给出了ASMDiskNumber磁盘号和AU号,这就描述了该extent的物理位置。文件区与分配单元之间的关系如下所示。区包含:一个AU用于前20,000个区(0–19999)4AUs用于接下来的20,000个区(20000–39999)16AUs用于40,000以上的区将可变大小的区与大型分配单元结合使用,可满足非常大的ASM文件的需要。X$KFFXP是ASM(AutomaticStorageManagement)自动存储管理特性的重要内部视图,该视图反应了FileExtentMap映射关系。,ASM会将文件split成多个多个piece分片,这些分片被称为Extents。在Disk上存放这些Extent的位置,就是我们常说的”AllocationUnit”。从11g开始一个Extent可能包含多个AU。以下我们通过X$KFFXP、v$asm_alias视图可以看到数据文件“SYSTEM.256.929288663”的extentmap分布ASM是怎么实现冗余?ASM提供冗余,failuregroup采用同一分数据的多份拷贝,保证不会出现单点错误,冗余拷贝单位为Extent。多份冗余拷贝不会存放在同一个failuregroup的磁盘中,换句话说一个failuregroup中只有一份数据的拷贝,不会有第二份。以下示例,一个normalredundancy的Diskgroup中存在8个Disk,并使用2个FailureGroup。可以看到每个failuregroup存在一份数据当磁盘DiskH失败,这个失败要求在失败磁盘上所有的Extent均被修复,Extent3和5会从现存的拷贝中复制到Failgroup2中可用的区域。在此例子中,Extent5被从DiskA拷贝到DiskF,extent3从DiskC拷贝到DiskG,最后还会将失败的磁盘从Diskgroup中drop出去。ASM怎么平衡磁盘组内各磁盘的数据?RebalanceRebalance将在diskgroup范围内将数据在其DISK上移动,以保证文件们均匀分布在diskgroup中的所有磁盘上。,一旦diskgroup中发生了一些存储配置变化例如diskadd/drop/resize均会自动触发一次rebalance。power参数将决定有多少slave进程并参与数据移动。rebalance中的每一次extent移动均会与数据库实例做协调,因为数据库实例可能同时需要读取或者写这个extent,所以数据库在rebalance同时能正常工作。其对数据库的影响一般较小,原因是同一时间只有一个extent被锁定以便移动,且仅仅是阻塞写入。以下示例Rebalance。磁盘组diskgroup中原有两个磁盘disk01和disk02。我们为磁盘组diskgroup添加一个磁盘disk03,这时disk03并没有内容在rebalance后,disk01、disk02和disk03的数据是会达到平衡。Asm的条带化是什么?ASM有两种条带类型:粗粒度,细粒度。熟悉存储的同学一听条带就知道是什么概念。粗粒度条带化类似于传统卷管理器使用1MB作为stripesize。粗粒度条带化分配文件时,ASM会在所有磁盘中平均分布分配单元。有时分布无法非常平均,但是随着时间的流逝,会变得几乎相等。上图显示了一个具有五个分配单元的文件,这些分配单元在条带化之后,分布在一个外部冗余磁盘组的五个磁盘中,该磁盘组共包含八个磁盘。细粒度条带化我们日常极少会用到,默认都是粗粒度。细粒度条带化将数据区拆分为128K

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功