专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

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结构如图:

60_1.png
图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结构如下图:

60_2.png

图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实例是怎么交互分工来完成的?

60_3.png

图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概念图如下:

60_4.png

图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的物理位置。

60_5.png

图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存一份数据。

60_6.png

图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出去。

60_7.png

图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后,三个磁盘数据达到平衡。

60_8.png

图8、ASM磁盘数据rebanlance

(九) ASM条带化

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

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

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

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

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

60_9.png

图8、粗粒度条带化

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

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

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

60_10.png

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

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

60_11.png

图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。感谢作者的分享。

文章永久链接:https://tech.souyunku.com/35157

未经允许不得转载:搜云库技术团队 » Oracle ASM

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们