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://www.cnblogs.com/lijiaman/p/9306679.html--------

  • 相关阅读:
    Linq to OBJECT延时标准查询操作符
    LINQ to XML
    动态Linq(结合反射)
    HDU 1242 dFS 找目标最短路
    HDu1241 DFS搜索
    hdu 1224 最长路
    BOJ 2773 第K个与m互质的数
    ZOJ 2562 反素数
    2016 ccpc 杭州赛区的总结
    bfs UESTC 381 Knight and Rook
  • 原文地址:https://www.cnblogs.com/eniniemand/p/14334172.html
Copyright © 2011-2022 走看看