zoukankan      html  css  js  c++  java
  • Oracle ASM

    (一)ASM概述

            提到Oracle ASM,相信大家都有熟悉又陌生的感觉,熟悉在于目前11g ARC数据库基本都使用ASM,陌生在于平时只是基本的使用,对ASM了解并不全面。例如数据库实例是如何与ASM交互与分工的、ASM存在哪些特性、数据库各种文件是怎样存放于ASM存储中、他的元数据是怎么存放的。

            Oracle 10g之前,存储设备的使用情况:UNIX/Linux操作系统上安装逻辑卷管理器(LVM),通过LVM将多个磁盘做成卷组,在卷组上划分逻辑卷(logical volume),然后在逻辑卷上创建文件系统,RAC环境下需要第三方共享集群软件。Oracle 10g之后引入的专用文件系统ASM,为数据库文件的管理提供了很好的支持。DBA能够完全在Oracle框架内执行许多任务,利用ASM来将一组磁盘转换成一个可伸缩的和高性能的文件系统/卷管理器。ASM磁盘组提供了直接作为原始设备来访问这个空间,并提供文件系统的便利性和灵活性。

            ASM对DBA有许多好处,使用ASM可以避免:

    •  I/O性能优化
    •  数据文件移动和重新组织
    • 文件名管理
    • 逻辑卷管理
    • 文件系统管理
    • 集群文件系统管理
    • 裸设备管理

    使用ASM可以显著减少:

    • 逻辑单元号(LUN)管理,逻辑单元数量较少,大小较大
    • 数据库管理员对系统管理员的依赖性
    • 手动执行任务时可能发生的错误

    (二)RAC环境下的ASM结构

            RAC环境下的ASM结构如图:


                                                                 图1. RAC环境下的ASM结构

    ASM的出现是为RDBMS管理文件存储,ASM中适合存放的文件类型包括:数据文件(data file)、控制文件(control file)、重做日志文件(redo log file)、归档日志文件(archive log file)、闪回日志文件(flashback log file)、参数文件(spfile)、RMAN备份以及block tracking file、datapump文件。

    ASM不会代替RDBMS去实施I/O读写,很多人对这一点存在误解,认为RDBMS发送I/O请求给ASM,ASM去执行I/O,这样的想法是错误的。ASM只负责将存储空间地址返回给RDBMS,真正的I/O还是会由RDBMS进程去完成,和不用ASM的裸设备一样,因此ASM不是I/O的中间层,也就不存在因为ASM而出现I/O瓶颈。

    (三)ASM实例

            ASM实例的主要任务之一就是管理ASM metadata元数据。ASM instance在10.2中使用与RDBMS一样的二进制软件,到11.2中分开独立实例,它类似于ORACLE RDBMS INSTANCE,有其SGA和大多数后台进程。

    ASM Instance结构如下图:

      

                                                              图2.ASM Instance结构图

    (1)ASM Instance中的内存结构主要包括4个部分:

    • Share Pool:用于元数据信息
    • Large Pool:用于并行操作ASM

           SQL> show parameter large_pool_size

           NAME                            TYPE         VALUE

           ------------------------------- -----------  ------------------------------

           large_pool_size                 big integer  12M

    • ASM高速缓存:用于重新平衡操作期间读取和写入块
    • Free Memory:可用的未分配内存

    (2)ASM的主要进程:

    • RBAL:在搜索过程中打开所有设备文件并协调重新平衡活动
    • ARBn:一个或多个从属过程,用于执行重新平衡活动
    • GMON:负责管理磁盘活动,例如删除或脱机以及提高ASM磁盘兼容性
    • MARK:根据需要将ASM分配单元标记为过时

    此外,ASM Instance还有一下进程:

    • ARCn:归档进程
    • CKPT:检查点进程
    • DBWn:数据库写进程
    • DIAG:诊断进程
    • Jnnn:作业队列进程
    • LGWR:日志写进程,ASM实例的SGA不包含log buffer,该实例也不使用联机重做日志文件,ASM实例的LGWR进程将事件记录信息复制到ASM磁盘组。
    • PMON:进程监视进程
    • SMON:系统监视进程
    • PSP0:进程衍生进程
    • QMNn:队列监视进程
    • RECO:恢复器进程
    • VKTM:虚拟计时器进程

    对于ASM实例,这些进程执行的任务与数据库实例中的不同。例如,ASM实例的SGA不包含日志缓冲区,该实例也不使用联机重做日志,ASM实例中的LGWR进程将事件记录信息复制到ASM磁盘。

    如果ASM是以集群方式建立的,则将在ASM实例中运行与集群管理相关的附加进程。其中一些进程如下:

    • LMON:全局入队服务监视器进程
    • LMDn:全局入队服务守护进程
    • LMSn:全局高速缓存服务进程
    • LCKn:锁定进程

    (四)初始化参数

    ASM由参数文件控制,通常设置的参数包括:

    • instance_type:对于asm实例来说,要设置成asm,对于数据库,则设置成RDBMS
    • ASM_POWER_LIMITE:默认为1,表示ASM磁盘组在进行rebalance时的并行度,值从1到11,1最慢,该参数可动态修改alter system set asm_power_limit=5;
    • ASM_DISKSTRING:是一个与操作系统有关的值,ASM使用它来限制搜索时考虑的磁盘集。默认为空字符串,表示ASM查找系统中所有ASM拥有读写权限的所有设备;
    • ASM_DISKGROUP:表示启动实例时,自动Mount那些磁盘组,可以写多个磁盘组
    • MEMORY_TARGET:默认自动启动内存管理,即使未明确设置MEMORY_TARGET参数也是如此,该参数建议不小于1536M。

    通常,这几个参数的值如下:

    asm_diskgroups                                           string     

    asm_diskstring                              string     

    asm_power_limit                            integer     1

    asm_preferred_read_failure_groups         string 

    memory_target                              big integer  0

    (五)数据库实例与ASM实例的交互

            例如,一个数据文件的创建,数据库实例与ASM实例是怎么交互分工来完成的?

     

                                                                     图3.数据库实例与ASM实例交互

    文件创建过程如下:

    1.用户在RDBMS发出create file命令,RDBMS会发起一个与ASM实例的连接,RDBMS端这个连接是ASMB后台进程,而ASM端则是个前台进程,接着,创建文件的指令通过这个链接提交给ASM实例;

    2.ASM根据创建文件的指令,从磁盘中分配AU,ASM会根据指定的模板(template)或diskgroup默认的template来决定文件的冗余、条带策略;

    3.AU分配完成后,ASM就把文件的Extent map发送给RDBMS;

    4.RDBMS发起I/O操作,初始化(格式化)这个ASM文件;

    5.初始化完成后,RDBMS向ASM发送commit请求,ASM把相应的allocation table、file directory、alias directory异步写回磁盘;

    6.提交确认会隐式关闭该文件。将来发生I/O时,数据库实例需要重新打开该文件。

    注意:用户在读写数据时,第4步不同,其它均相同

            经常有人问,数据库实例使用ASM作为存储,只需要在文件名中加上磁盘组名即可,而在数据库中没有ASM相关的静态配置,那么是怎么找到ASM磁盘组的?

    其实ASM实例挂载磁盘组后,ASM会把disk group、asm instance name、oracle home path等信息注册到CSS,当数据库实例打开或创建名字以“+”开头的文件时,它会通过CSS来查看disk group和mount该DG的ASM实例的信息,再通过CSS中这些信息构造connect string连接ASM实例的。

    ASM概念图如下:

     

                     图4.数据库逻辑结构与ASM物理结构的关系

    (六)磁盘组、磁盘、AU、ASM文件、EXTENT MAP

    (6.1)ASM磁盘组(ASM diskgroup)

    一个Disk Group由多个ASM Disk组成,该Diskgroup空间使用信息的元数据均完整的包含在这个磁盘组中,通过v$asm_diskgroup视图查看磁盘组信息。

     SQL> select * from v$asm_diskgroup;

    GROUP_NUMBER    NAME        SECTOR_SIZE  BLOCK_SIZE  ALLOCATION_UNIT_SIZE   STATE        TYPE      TOTAL_MB    FREE_MB     COLD_USED_MB  USABLE_FILE_MB  VOTING_FILES
    ------------    ---------   -----------  ----------  --------------------   ----------   ------    ----------  ----------  ------------  --------------  ------------
               1    ARC         1024         4096        1048576                CONNECTED    EXTERN    204800       178612     26188         178612           N
               2    DATA        1024         4096        1048576                CONNECTED    EXTERN    2048000      1523261    524739        1523261          N
               3    OCRVOTE     1024         4096        1048576                MOUNTED      EXTERN    6144         5716       428           5716             Y

    我们可以看到一共有3个DG,名字分别为ARC、DATA、OCRVOTE,磁盘组的Block Size大小为4096b(4kb),AU大小为1Mb,STATE状态有CONNECTED,说明数据库实例正在连接使用该DG;状态为MOUNTED,说明DG已经挂载,随时可以使用。TYPE类型显示为外部冗余,总容量和空闲容量在这也有显示。

    磁盘组冗余有三种选择:

    • External Redundancy:没有Fialure Group,不提供任何镜像;
    • Normal Redundancy:至少要求2个Failure Group,默认支持双向镜像;
    • High Redundancy:要求3个Failure Group,默认支持三向镜像。

    (6.2)ASM磁盘(ASM disk)

    对于ASM而言LUN Disk可以是裸设备也可以直接是块设备,可以通过v$asm_diskgroup来查看磁盘信息:

    SQL> select * from v$asm_disk;
     
    GROUP_NUMBER  DISK_NUMBER  MOUNT_STATUS  MODE_STATUS  LIBRARY    OS_MB      TOTAL_MB  FREE_MB  NAME           FAILGROUP      PATH                VOTING_FILE  SECTOR_SIZE   FAILGROUP_TYPE
    ------------  -----------  ------------  -----------  -------    --------   --------  -------  -------------- ------------   ------------------  -----------  -----------   --------------
               3  0            CACHED        ONLINE       System     6144       6144      5716     OCRVOTE_0000   OCRVOTE_0000   /dev/rdisk/disk18   Y            1024          REGULAR
               1  0            CACHED        ONLINE       System     204800     204800    186864   ARC_0000       ARC_0000       /dev/rdisk/disk19   N            1024          REGULAR
               2  0            CACHED        ONLINE       System     1024000    1024000   761637   DATA_0000      DATA_0000      /dev/rdisk/disk20   N            1024          REGULAR
               2  1            CACHED        ONLINE       System     1024000    1024000   761624   DATA_0001      DATA_0001      /dev/rdisk/disk21   N            1024          REGULAR

    我们可以看到ASM Disk,其中/dev/rdisk/disk19属于diskgroup1,/dev/rdisk/disk20和/dev/rdisk/disk21属于diskgroup2,/dev/rdisk/disk18属于diskgroup3。通过ASM磁盘信息,我们也可以看到磁盘的使用情况。

            创建ASM磁盘的方法主要有:ASMLIB和UDEV。通常不建议使用ASMLIB创建ASM磁盘,缺点有:

                  1.对于多路径设备,需要配置ORACLEASM_SCANORDER及ORACLEASM_SCANEXCLUDE;

                  2.因为ASM Instance使用ASMLIB提供的ASM disk,所以增加了额外的层面;

        3.不是每个版本的Linux Kernel都支持ASMLIB;

        4.使用ASMLIB意味着要花费更多的时间去创建和维护。

    (6.3)AU

            AU(allocation unit)是Disk Group的分配单元,一个ASM磁盘上的可用空间总是整数倍个AU。在每一个ASM Disk的头部均有一个表,该表的一个记录代表ASM Disk的一个AU。

       在创建磁盘组时可以配置AU大小,AU默认大小为1MB,AU足够小,能够缓存数据库,但足够大,能够提供高效的访问。AU的大小可设置为:1,2,4,8,16,32或64MB。

    (6.4)ASM文件

            ASM文件由一组分配单元(AU)组成,这些文件只属于某个磁盘组,不可跨越磁盘组,每个ASM文件都具有唯一的系统生成的名称,ASM文件的文件名以“+”号开头,如“+data/orcl/datafile/system.256.689832921”。如果在创建ASM文件时指定了文件的名称,如“+data/orcl/tbs01.dbf”,则该名称为ASM文件的别名,ASM会将该别名与实际创建的文件名称相关联。

       ASM中可以存放数据文件、日志文件、控制文件、归档日志文件等。

    (6.5)区映射(EXTENT MAP)

    区映射是ASM的Extent指针(pointer)给出了ASM Disk Number和AU号,这就描述了该Extent的物理位置。

     

                               图5.ASM区映射

    文件区与分配单元(AU)之间的关系如下所示。区包含:

    • 1个AU用于前20000个区(0-19999)
    • 4 AUs用于接下来的20000个区(20000-39999)
    • 16 Aus用于40000以上的区

    将可变大小的区与大型分配单元结合使用,可满足非常大的ASM存储文件的需要。

    X$KFFXP是ASM自动存储管理特性的重要内部视图,该视图反应了File Extent Map映射关系。

    (七) ASM故障组

        ASM怎么实现冗余,failure group采用同一份数据的多份拷贝,保证不会出现单点错误,冗余拷贝单位为Extent。多份冗余拷贝不会存在同一个failure group 的磁盘中,换句话说,一个failure group中只有一份拷贝的数据,不会有第二份。

       failure group又是什么概念呢?个人理解,failure group是diskgroup的一个子集,在创建diskgroup的时候,我们可以指定磁盘组的failure group的数量,如果不指定,则diskgroup中的每个磁盘都是一个failure group。对于冗余级别为external的diskgroup, 只保留一份数据,因此只需要有1个diskgroup即可,对于冗余级别为normal的diskgroup, 需要保留一份数据及其镜像,因此至少需要有2个diskgroup,对于冗余级别为high的diskgroup, 需要保留一份数据及两份镜像,因此至少需要有3个diskgroup。

    以下示例,一个normal redundancy的diskgroup中存在8个disk,并使用2个failure group,可以看到每个failure group存一份数据。

     

                          图6.ASM Normal Redundancy Extents分布图示

    当disk H发生故障时,这个失败要求在失败磁盘上的所有的Extent均被修复,Extent3和Extent5会从现存的磁盘中复制到failure group 2中可用的区域。在此例子中,Extent 5被从disk A中复制到disk F,Extent 3从disk拷贝到disk G,最后将失败的磁盘从diskgroup中drop出去。

     

                          图7.失效时的磁盘分配

    (八)ASM磁盘数据rebalance

    ASM怎么平衡组内磁盘的数据?Rebanlance将在diskgroup范围内将数据在disk上移动,以保证文件均匀分布在diskgroup上的各个磁盘中。一旦diskgroup发生了存储配置变化,如增加或删除磁盘,resize会自动出发一次rebanlance。power参数将决定有多少个slave进程参与数据移动。

    以下示例Rebanlance。磁盘组diskgroup中有2个磁盘disk A和disk B,这时,我们再增加一个磁盘disk C,这时disk C并没有数据。在Rebanlance后,三个磁盘数据达到平衡。

                         图8.ASM磁盘数据rebanlance

     (九) ASM条带化

    在ASM中,条带化主要有2个用途:

    • 在磁盘组的所有磁盘中执行I/O负载平衡;
    • 改善I/O等待时间

    ASM条带化一共有2种类型,粗粒度条带化和细粒度条带化。

    (9.1)粗粒度条带化(主要用于平衡I/O)

            粗粒度条带化条带大小固定为AU大小,条带宽度固定为1。因此,粗粒度条带化在分配文件时,ASM会在所有磁盘中分布分配单元,有时无法非常平均,但随着时间的流逝,会变得几乎相等。下图显示了一个具有5个分配单元的文件,这些AU在条带化之后,分布在一个冗余级别为external的磁盘组中,该磁盘组一共有8个磁盘。

                             图8.粗粒度条带化

    (9.2)细粒度条带化(主要用于改善等待时间)

       细粒度条带化极少使用,默认都是粗粒度。细粒度条带化条带大小为128KB(默认),AU大小为1MB(默认),条带宽度为8。细粒度条带化将数据区拆分为128KB的块,然后许多磁盘分布每个区的负载,从而改善特定文件类型的等待时间,默认情况下,细粒度条带化用于控制文件和联机重做日志文件。

     例子:具有8个磁盘构成的磁盘组,采用外部冗余的模式,AU大小为1MB,细粒度条带化条带大小为128KB,AU大小为1MB。第一个1MB区在8个AU中以128KB条带形式写入。因此,1MB数据分布在8个磁盘中,而不是1个磁盘中。

                   图9.第一个1MB区在8个AU中以128KB条带形式写入

    当第二个1MB区数据进来后,继续分配在每个磁盘AU的第2个128KB块中,这种模式一直继续,直到第1组AU写满,然后再分配下一组AU。

                          图9.第二个1MB区继续在8个AU中以128KB条带形式写入

    (十)ASM常用视图

    视图名称 x$基表名 描述
     V$ASM_DISKGROUP  X$KFGRP  实施磁盘发现disk discovery和列出磁盘组
     V$ASM_DISKGROUP_STAT X$KFGRP_STAT
     显示磁盘组状态
     V$ASM_DISK X$KFDSK,X$KFKID
     实施磁盘发现disk discovery和列出磁盘以及磁盘的使用量
     V$ASM_DISK_STAT X$KFDSK_STAT,X$KFKID
     列出磁盘及度量信息
     V$ASM_FILE X$KFFIL
     列出ASM文件,也包括了元数据信息
     V$ASM_ALIAS X$KFALS  列出ASM的别名,文件和目录
     V$ASM_TEMPLATE X$KFTMTA
     列出可用的模板及属性
     V$ASM_CLIENT X$KFNCL
    列出连接到ASM实例的会话客户端
     V$ASM_OPERATION X$KFGMG
    列出rebalance重平衡操作
     V$ASM_DISK_IOSTAT X$KFNSDSKIOST I/O统计信息

    【完】

    注:本文整理自云和恩墨的线上讲座,原文:https://wenku.baidu.com/view/752e450fdc36a32d7375a417866fb84ae45cc391.html。感谢作者的分享。

  • 相关阅读:
    hdu_1072_Nightmare(BFS)
    hdu_4826_Labyrinth_2014百度之星(dp)
    hdu_4823_Energy Conversion
    hdu_3063_Play game
    hdu_3062_Party(2-SAT)
    5、1 部署
    klayge 4.2.0 编译vc9
    数据延迟加载
    指令 scope
    指令 作用域
  • 原文地址:https://www.cnblogs.com/lijiaman/p/9306679.html
Copyright © 2011-2022 走看看