`

ASM内部原理(原创)

 
阅读更多

ASM的SGA组成
ASM实例的SGA包括Buffer Cache,Share Pool,Large Pool等。 需要注意的是Share Pool,因为Extent Map要放在这部分的内存中,需要根据数据量来估计Extent Map的大小做相应的调整。
Extent Map的大小可以根据所有文件大小的和来估算,使用下面的语句来计算所有文件和:
Select sum(bytes)/(1024*1024*1024) from v$datafile;
Select sum(bytes)/(1024*1024*1024) from v$logfile a, v$log b where a.Group#=b.Group#;
Select sum(bytes)/(1024*1024*1024) from v$tempfile where status='online';
这3个sum 的总和对应着数据库存放ASM中所有文件大小总和,对于使用External Redundancy 的磁盘组,每100G 需要1MB的Extent Map,根据这个比例计算Extent Map 所需要的空间,在加上额外的2MB就可以了。在实际工作中一般不需要考虑ASM SGA的配置,使用Oracle提供的缺省值就可以了。
ASM的后台进程
ASM 实例比RDBMS 实例多2个进程:RBAL和ABRn。
RBAL:这个进程也叫Rebalancer进程,负责规划ASM 磁盘组的Reblance活动。
ABRn:是RBAL进程的子进程,这个进程在数量上可以有多个,n从1~9,这组进程负责真正完成Reblance活动。
使用ASM 作为存储的RDBMS 实例也会多出2个进程:RBAL和ASMB
RBAL:这个进程的主要功能是打开每个磁盘的所有磁盘和数据的Rebalance。
ASMB:这个进程作为ASM 实例和数据库实例之间的信息通道。这个进程负责与ASM 实例的通信,它先利用Diskgroup Name从CSS 获得管理该Diskgroup的ASM实例的连接串,然后建立到ASM的持久连接,两个实例之间通过这条连接定期交换信息,同时也是一种心跳机制。
RDBMS实例要想使用ASM作为存储,RDBMS实例必须在启动时从ASM实例获得Extent Map,以后发生磁盘组的维护操作, ASM实例还要把Extent Map的更新信息通知给RDBMS 实例,这2个实例间的信息交换就是通过ASMB 进程完成的。这也就为什么: ASM 实例必须要先于数据库实例启动,和数据库实例同步运行,迟于数据库实例关闭。
注意:ASM 实例和数据库实例的关系可以是1:1,也可以是1:n。如果是1:n,最好为ASM 安装单独的ASM_HOME。

Disk Discovery

Disk Discovery是指Oracle确定磁盘能够被ASM实例使用的全过程。这个过程包括权限检查,内容检查,后者更为重要。在RAC环境下,存储设备是节点间共享使用的,同一个设备在不同节点的设备名称可能不一样,比如磁盘在节点1被标识为/dev/sdb1,而在节点2被标识为/dev/sdb2,而Oracle的数据文件只有一个路径名称,这样可能破坏数据。必须使用其他机制来解决这种不一致。

ASM的Disk Discovery就是用来避免这种不一致造成的危害。ASM的每个磁盘都是自描述的,由于ASM具有丰富的元数据,因此ASM并不是根据路径名称或者设备名称来判断磁盘的归属,而是根据这些自描述信息来确认的。因此ASM允许系统重启后的路径变化,也允许RAC节点间的ASM Disk的路径名称不同。但是作为良好的工作习惯,还是要保持路径信息的一致。

被ASM实例检查的所有磁盘构成一个Diskcovery Set,这些磁盘有参数ASM_DISKSTRING定义。ASM会在下列情况下进行Disk Recovery:

Mount diskgroup
Create diskgroup
Add disk
Online disk
Select from V$ASM_DISKGROUP or  V$ASM_DISK

ASM Striping

在介绍ASM条带之前先介绍下条带深度和条带宽度

条带深度
为了提高 I/O 效率,一次逻辑 I/O请求转化成物理 I/O 请求后,应该让这些物理 I/O 分布到最多的物理磁盘上去,也就是每个物理磁盘处理的物理I/O最少,最好只有一次 , 因而影响条带的一个重要因素就是一次逻辑 I/O请求的大小。
此外,系统中I/O的并发度不同我们对条带的配置要求也不同。例如,在高并发度且逻辑 I/O请求的大小都比较小的情况下,我们希望一块磁盘能同时响应多个I/O 请求;而在那些存在大的逻辑 I/O 请求的低并发度系统中,我们可能就需要多块磁盘同时响应一个 I/O 请求。无论是一个磁盘还是多个磁盘响应 I/O 请求,我们的一个原则是让一次逻辑 I/O 能被物理设备一次处理完成。
条带宽度
正如我们前面所述,无论是一个还是多个磁盘响应一个逻辑 I/O,我们都希望物理设备只处理一次 I/O 。因而在确定了条带深度的基础上,我们需要保证条带宽度 >= I/O 请求的大小/ 条带深度。这样就能最大程度的保证 I/O 请求的并发处理能力了。

block size为rdbms的逻辑存储单位,Extent为rdbms的逻辑扩展单位,AU为ASM的物理存储单位,ASM的条带深度为物理IO单位,决定了每次向磁盘发出IO请求的大小,ASM的条带宽度为一个条带分布的ASM磁盘数。

在ASM中的条带化是在ASM File级别配置的,可选的条带粒度有Fine和Coarse两种,由_asm_stripesize控制条带深度,由_asm_stripewidth控制条带宽度。对于Oracle来讲,db_block_size即设定的逻辑 I/O。db_file_multiblock_read_count就一次读取时最多并行的数据块的个数。在8i或者以上的版本之后,Oracle的每次实际最大IO大小为1MB由SSTIOMAX这个内部常数。在ASM环境下,单次最大物理IO大小由_asm_maxio决定。单次最大逻辑IO由 db_block_size*db_file_multiblock_read_count决定。 db_block_size*db_file_multiblock_read_count _asm_maxio无法超过 SSTIOMAX指定的1MB, 超过时配置无法生效,低于1MB时配置能够生效。 理论上条带宽度*条带深度>=2*db_block_size*db_file_multiblock_read_count是最优的IO配置。因为假如设置成与Oracle数据块相同大小,无法保证Oracle数据块的边界正好与条带单元的边界对应,如果不对应的话,就会出现大量的一个I/O由两个条带单元,来处理的情况。

粗粒度条带(Coarse Striping)

这种条带化条带粒度是在AU级别上实现的,每个条带粒度对应1个AU。及AU为1MB条带深度就为1MB,AU为16MB条带深度就为16MB。条带宽度将一直是1。宽度和条带深度不受_asm_stripewidth和_asm_stripesize控制。假设磁盘组由4个磁盘组成,则数据文件的第一个Extent写到磁盘1的AU2中,第二2Extent会被写到磁盘2的AU2中,第3个Extent会被写到磁盘3的AU2中,第4个Extent会被写到磁盘4的AU2中,第5个Extent会被写到磁盘3的AU3中,依次循环。

细粒度条带(Fine Striping)

这个条带化的条带粒度默认为128KB,也就是数据被以128KB为单位按照上文所述的方式进行条带读写。该条带化的情况条带宽度和条带深度分别受_asm_stripewidth和_asm_stripesize控制,其中在细粒度条带下,条带深度最大为1MB。

具体的实验过程可以参考
http://www.itpub.net/thread-1705245-1-1.html

两种条带的比较

之所以有两种条带化方法,主要是因为Oracle文件的区别。对于大部分Oracle文件(包括数据文件,归档日志,备份集),文件本身很大,每次IO操作的数据量也很大。对于这些文件操作时,真正的磁盘数据读写时间远大于磁盘头的寻址时间,因此这种模式下,使用个较大的条带策略(Coarse Striping)可以提供吞吐量。

而联机日志文件和控制文件,由于文件本身较小,每次IO操作数据量很小且对读写的延时性要求较高,采用Fine-Striping将数据分布到多个disk上。如果采用AU为单位分散文件内容,则磁头寻址在整个等待的时延中相当可观,故通过把数据分布到多个磁盘的AU上,通过并行的方式可以减少时延。同时,由于io粒度较小,数据同步到磁盘到磁盘的时间较短。

ASM和RDBMS交互

当ASM实例挂载一个磁盘组之后,ASM会把Disk Group Name、ASM Instance、Oracle Home Path等信息注册到CSS,这些信息会被RDBMS用来构造Connect String。当RDBMS启动过程中需要访问某个ASM File时,RDBMS会和CSS联系,从CSS获得Connect String,然后发起一个到ASM实例的连接,这条ASM和RDBMS实例之间的出事连接叫Umbilicus,只有RDBMS打开ASM File,这个连接就会保持活动。直到所有ASM FILE都被RDBMS关闭之后,这个连接才会关闭。在RDBMS一端,这个连接是ASMB后台进程,而在ASM方面,叫做Umbilicus Forground(UFG)。ASM和RDBMS通过这个连接发送互动信息。如果检查listener中ASM实例的注册信息,可以看到ASM不少OPEN状态,而是以BLOCKED状态注册的。BLOCKED状态禁止了通常方式的数据库连接,从而确保所有连接都是通过ASMB后台进程的路由完成,保证了ASM操作的安全性。

$lsnrctl status
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 24-DEC-2012 20:29:38
Copyright (c) 1991, 2005, Oracle.  All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_CZMMIAO2
Version                   TNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date                24-DEC-2012 19:52:25
Uptime                    0 days 0 hr. 37 min. 12 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/10.2.0/crs/network/admin/listener.ora
Listener Log File         /u01/app/oracle/product/10.2.0/crs/network/log/listener_czmmiao2.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.2.112)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.2.102)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...
Service "+ASM_XPT" has 1 instance(s).
  Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...

Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "czmmiao" has 2 instance(s).
  Instance "czmmiao1", status READY, has 2 handler(s) for this service...
  Instance "czmmiao2", status READY, has 1 handler(s) for this service...
Service "czmmiaoXDB" has 2 instance(s).
  Instance "czmmiao1", status READY, has 1 handler(s) for this service...
  Instance "czmmiao2", status READY, has 1 handler(s) for this service...
Service "czmmiao_XPT" has 2 instance(s).
  Instance "czmmiao1", status READY, has 2 handler(s) for this service...
  Instance "czmmiao2", status READY, has 1 handler(s) for this service...
The command completed successfully

创建ASM File的过程

1、RDBMS产生一个前台进程去连接ASM实例的进程,创建指令通过这个连接交给ASM实例

2、ASM实例根据创建指令创建文件,从磁盘分配AU;ASM会根据指令中指定的template或Diskgroup默认的template来决定文件的冗余、条带策略;

3、AU分配完成后,ASM就吧这个文件的Extent Map发送给RDBMS;ASM创建一个COD记录以跟踪目前这个挂起操作;

4、RDBMS发起IO操作,初始化这个ASM File,这时候不需要ASM介入

5、初始化完成后,RDBMS向ASM发生commit请求

6、ASM接到commit请求后,ASM的LGWR进程吧ACD Change Record写入到ACD Directory;然后ASM的DBWR进程吧Allocation Table、File Directory、Alias Directory异步写回磁盘;

7、如果RDBMS放弃创建,ASM会使用COD混滚文件操作。回滚操作会把Allocation Entries标志位Free,释放File Directory中的条目

ASM File的打开和IO过程

1、RDBMS向ASM Instacne发生file-open请求

2、ASM查看ASM SGA中是否存在相应的Extent Map,如果有则直接通过ASMB把Extent Map发生给RDBMS,如果没有则从File Directory,再通过ASMB把Extent Map发生给RDBMS

3、在10g中ASM会把整个ASM FILE的extent map都发生给RDBMS,在11g中只会返回前60个Direct Extent,Indirect Extent会在需要时载入。

4、ASM FILE的整个IO过程由RDBMS直接操作ASM FILE不需要ASM实例介入

删除ASM File的过程

1、RDBMS实例想ASM实例发出删除请求

2、ASM创建COD记录用于回滚操作,接着标记allocation table中的条目为free,释放File directory记录,删除alias direcotry中的别名记录。

3、如果此时ASM实例崩溃,则利用COD记录进行回滚

关于ASM的元数据读者可以参考
http://czmmiao.iteye.com/admin/blogs/1749971

ASM实例恢复

ASM实例和RDBMS实例一样,也可能出现异常,也需要进行实例恢复。在单实例环境下,这种恢复叫做ASM Instance Recovery。在RAC环境下,某个节点上的ASM实例出现故障,会触发其他节点上的ASM实例进行实例恢复,这种恢复叫做ASM Crash Recovery。这两种操作和RDBMS对应的恢复同名。

在ASM实例运行中,CSS起着IO隔离的作用。存储由ASM实例维护,但是RDBMS在运行过程中,并不是所有的读写都要借助ASM实例,RDBMS实例只在打开数据文件时需要从ASM实例获得Extent Map信息,并把这些信息保存在SGA中。而后的数据读写都是直接操作存储的。因此如果ASM实例终止,必须关闭所有使用该ASM的RDBMS实例,以确保这些RDBMS实例不能操作该ASM管理的存储上的数据,也就是IO隔离(IO Fencing)
ASM实例启动时,需要在CSS中注册,而所有使用ASM存储的RDBMS实例启动时,也要向CSS注册,同时从CSS获得ASM的连接串。RDBMS实例和ASM实例是通过由ASM实例端的UFG和RDBMS实例端的ASMB进程组成的通道进行通信的。如果ASM实例Crash,UFG就会终止RDBMS的ASMD进程,对于RDBMS而言,这个进程是个关键进程,起终止会导致RDBMS终止。两个实例除了主动向CSS注册,CSS也要跟踪两个实例中IO的健康状况,如果RDBMS实例终止,CSS通知ASM,ASM实例就替代RDBMS实例执行一些资源回收释放工作。ASM实例仍然正常运行。

在ASM实例恢复时,ASM是在每个磁盘组级别上进行恢复的,每个磁盘组上的ACD和COD两部分内容在ASM实例恢复中起重要作用,其前者相当于RDBMS中的联机日志,后者相当于Undo tablespace。ASM实例的恢复过程中,首先使用ACD内容吧ASM Cache恢复成一致的状态,然后再执行COD恢复,COD记录的都是长时间的操作,这一步就是回滚这些操作,比如回滚文件创建操作。ASM Recovery的技术和RDBMS的技术一致。


参考至:
《Oracle Automatic Storage Management: Under-the-Hood & Practical Deployment Guide》

                 大话Oracle Rac》张晓明著

                 http://www.cnblogs.com/huangjingzhou/articles/2140514.html

                 http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0812yuancg/

                 http://www.itpub.net/thread-1705245-1-1.html
                 http://www.orafaq.com/papers/tuning_asm.pdf
                 http://www.linuxidc.com/Linux/2012-01/51884.htm
                 http://www.emc.com/collateral/hardware/white-papers/h6015-oracle-data-warehouse-sizing-dmx-4-dell-wp.pdf
                 http://dbanotes.net/database/oracle_mbrc_sstiomax.html
本文原创,转载请注明出处、作者
如有错误,欢迎指正
邮箱:czmcj@163.com

0
0
分享到:
评论

相关推荐

    ASM1061原理图

    ASM1061 原理图 PCIE转2 port Sata芯片 ASM1061 原理图 PCIE转2 port Sata芯片

    1、ASM1064 DATASHEET; 2、ASM1064 参考原理图设计; 3、支持的SPI Flash清单

    2. **ASM1064 参考原理图设计**: 这部分资料通常包括一个或多个ASM1064的典型应用电路示例,展示了如何将ASM1064整合到实际的电路板设计中。参考原理图会展示芯片与其他组件(如电容、电阻、电感等)的连接方式,...

    ASM1061资料文件.rar

    在设计原理方面,ASM1061芯片包含了一个PCI-E兼容的物理层(PHY)和一个SATA PHY,它们之间通过内部的桥接逻辑进行通信。PCI-E PHY负责处理与主板上的PCI-E接口的通信,而SATA PHY则处理与SATA设备的连接。此外,ASM...

    ASM1053电路原理图

    ASM1053电路原理图 ASM1053原理图.pdf SATA转USB桥接的电路原理图

    ASM 1351.zip

    3. **ASM1351 design kit.zip** - 设计套件通常包含用于开发和测试ASM 1351芯片的电路板布局、原理图、PCB设计文件以及其他相关资源。这些文件帮助工程师快速启动基于ASM 1351的项目,提供了一个起点,减少了从零...

    ASM1153_2_5SIZE_R110.pdf

    这份文件看起来是一份关于ASM1153芯片的原理图和详细的技术规范。 ASM1153是一种多功能芯片,主要设计用于电源管理。其应用广泛,特别是在需要多电源输入输出的电子系统中。这份文件主要描述了ASM1153的电源设计、...

    ASM1053芯片数据手册

    ASM1053芯片是一款由祥碩科技股份有限公司(ASMedia Technology Inc.)推出的SATA转USB桥接控制器。其设计目的是为了将SATA接口的存储设备转换为USB接口,从而便于在没有SATA接口的计算机系统中连接和使用这些存储...

    asm不错的图

    标题与描述中的“asm不错的图”暗示了讨论的是与Oracle Automatic Storage Management (ASM)相关的图形化展示或概念图。ASM是Oracle数据库系统中用于管理存储的一种高性能、高可用性技术,它提供了一种灵活的方式对...

    微机接口与组成原理课程设计(ASM程序)

    这些项目不仅帮助学生深入理解计算机系统的内部工作原理,也锻炼了他们的实践能力和编程技能。以下是关于这些项目的一些关键知识点: 1. **步进机**: - 步进机是一种模拟硬件设备,通过编程控制电机按照预定步骤...

    asm的搜索图片数据

    ASM,全称是Active Shape Models,是一种在计算机视觉和图像处理领域广泛应用的模型。它结合了统计形状模型和图像特征,常用于物体检测、识别、定位以及姿态估计等任务。在"asm的搜索图片数据"这个场景中,我们讨论...

    \微机原理源程序\ASM86

    SOUND.asm ; 电子发声设计实验

    asm.jar各个版本

    asm-1.3.3.jar, asm-1.3.4.jar, asm-1.3.5.jar, asm-1.4.1.jar, asm-1.4.2.jar, asm-1.4.3.jar, asm-1.4.jar, asm-1.5.1.jar, asm-1.5.2.jar, asm-1.5.3.jar, asm-2.0.jar, asm-2.1.jar, asm-2.2.1-sources.jar, asm...

    ASM1153E FW

    这是ASM1153E的标准FW,通过特定的MPtool工具来烧录。

    ASM1166datasheet.pdf

    ASM1166是一款SATA主机控制器,由ASMedia Technology Inc.生产,该公司是一家专注于研发高性能计算机界面解决方案的厂商。根据文件内容描述,ASM1166是一款支持PCI-E总线的SATA控制器,它能够连接SATA设备,并通过...

    ASM1153E Datasheet

    ASM1153E是一款由ASMedia Technology Inc.生产的USB3.0到SATA桥接控制器,主要用于构建移动硬盘盒。这款芯片的核心功能是将高速的USB3.0接口转换为SATA接口,以实现外部存储设备(如硬盘驱动器)与计算机之间的数据...

    asm64汇编语言介绍及原理

    ### asm64汇编语言介绍及原理:深入解析与核心概念 #### 一、asm64汇编语言的诞生背景与重要性 asm64,即64位汇编语言,是随着计算机技术的发展,特别是在处理器架构从32位向64位过渡的过程中应运而生的一种编程...

    C-include-ASM.zip_asm中include asm_c语言中嵌套asm

    在标题提到的"C-include-ASM.zip_asm中include_asm_c语言中嵌套asm",我们主要讨论的是如何在C程序中使用汇编代码,并且可能涉及到如何在汇编代码中包含其他汇编模块。 首先,让我们了解一下C语言嵌套汇编的基本...

    ASM操作字节码,动态生成Java类class文件

    在模拟Spring的AOP实现原理时,我们可以用ASM创建一个代理类,这个代理类会在目标方法调用前后插入自定义的行为,例如记录日志、执行事务控制等。以下是一个简化的步骤: 1. 创建`ClassWriter`实例,并设定类的访问...

    asm-util.jar

    asm-util-1.3.4.jar, asm-util-1.3.5.jar, asm-util-1.4.1.jar, asm-util-1.4.3.jar, asm-util-1.5.1.jar, asm-util-1.5.2.jar, asm-util-1.5.3.jar, asm-util-2.0.jar, asm-util-2.1.jar, asm-util-2.2.1-sources....

Global site tag (gtag.js) - Google Analytics