1: ASM(automatic storage management)的基本架构
1.1 ASM功能
在10G版本之前,Oracle数据库文件的存储选项主要有两种:文件系统或者裸设备(Raw
device),也就是说Oracle并没有自己专用的数据库文件系统。所以,Oracle在10G版本中推出
了属于自己的数据库文件系统和卷管理器ASM,简称自动存储管理,用于保存与管理数据库相
关的文件和磁盘。其中,卷管理器(Volume manager)部分主要负责实现磁盘的条带花和
冗余功能,而文件系统是为数据库相关的文件提供文件管理。从10G版本开始,Oracle推荐使
用ASM作为数据库和集群的存储解决方案。
1.2 磁盘组
1.2.1 基本概念和术语
磁盘:它是ASM管理的设备,可以是一块具体的物理磁盘,也可以是某一块磁盘上的一
个分区,或者是一个NFS文件系统。
磁盘组:由若干块磁盘构成一个逻辑整体。磁盘组是ASM组织磁盘和管理磁盘的方式。
ASM文件:保存在ASM磁盘组上的数据组织形式,它是一个逻辑概念。
ASM上可以保存文件:控制文件、数据文件、重做日志文件、归档重做日志文件、闪回
日志文件,RMAN备份集、参数文件等。
AU(Allocate unit):简称分配单元,是ASM分配的最小单位,类似数据库中的快。每个
磁盘组都可以根据自己的需求指定AU的大小,默认的AU尺寸为1M。另外,AU的尺寸应
该是数据库块的整数倍。
Extent:简称扩展,是由若干个AU构成的集合。每个Extent只能保存在同一个ASM磁盘
中,而且只能属于同一个ASM文件,Extent是ASM磁盘组分配空间的单位。Extent 类似
数据库层面的Extent概念。对于ASM层面的Extent,它的大小是固定的。
1.2.2 磁盘组的结构
可以通过下图来理解磁盘组、磁盘、ASM文件、Extent和AU之间的关系。
盘组;每个ASM文件包含若干个Extent,Extent是数据库或其他客户端向ASM申请的空间
单位;每个Extent是有一个或多个AU构成,AU是ASM分配空间的最小单位。
磁盘组、磁盘、ASM文件、Extent和AU的关系类似于数据库表空间、数据文件、段、
Extent和快的关系。下图为简单对比:
1.2.3 数据冗余和条带化
条带化:条带化的作用是把数据平均分配到磁盘组的各个磁盘,并降低I/O操作的延时。
ASM磁盘组提供两种条带化:
1)细粒度条带化(fine-grained
stripe): 这种条带化的粒度是128KB。
适用于并发程度低的IO。 在低并发度的DSS系统中,由于IO请求比较序列化,为了避
免出现热点磁盘,我们需 要避免逻辑IO只有一块磁盘处理.我们选择小的条带深度,
使一个逻辑IO分布到多个磁盘上,从而实现IO的负载均衡。这就叫细粒度条带。
2)粗粒度条带化(coarse-grained
striping):这种条带化的粒度是1个AU。
适用于并发程度高的IO。在OLTP系统中,会存在大量小的并发的IO请求。这时就需
要考虑选择比较大的条带深度。通过粗粒度条带能实现最大的IO吞吐量(一次物理IO
可以同时响应多个并发的逻辑IO)。大的条带深度能够使像全表扫描那样的多数据块
读操作由一个磁盘驱动来响应,并提高多数据块读操作的性能。
粗粒度条带下,条带大小、宽度不可调。条带大小将一直等同于AU大小,条带宽度
一直是1。也就是一个条带只在一个磁盘中,不会跨越磁盘。10G、11G默认的AU大
小都是1M,而且,默认情况下,ASM的条带是“不可调粗粒度”。也就是AU大小
1M,条带大小也是1M,条带宽度为1。这意味着数据会以1M为单位,平均分布到
磁盘组所有磁盘中。也就是ASM保证1M数据逻辑上是连续的。如果段的区大小也是
1M,哪么,全表扫描时,一次IO可以在一块磁盘上一次读1M数据。
条带深度:指的是条带的大小,也叫条带大小。
条带宽度:是指同时可以并发读或写的条带数量。
还有一点注意事项,在ASM中,AU,是属于磁盘组层面的概念,一个磁盘组,只能
有一个统一的AU大小。在创建磁盘组时,要指定AU的大小,一旦指定,在磁盘组创
建后无法变更。 而条带,是属于文件层面的概念。同一磁盘组中,各个文件可以有
不同的条带大小。在创建表空间时,要同时确定条带信息。也是一旦确定,无法更
改。
默认情况,Oracle不同类型的文件使用的条带化选项可以参考下表。
可以看到,Oracle分配数据的方式是尽量平均分布到磁盘组的所有磁盘中去,这与传统的RAID方式完全不同。这种数据分布方式无论是读取还是写入,效率都要比传统的RAID高很多。当然,这种数据分布的方式也要求磁盘组中的每一块磁盘大小都应该相同。
冗余(镜像):保护数据的安全性和高可用性。
除了条带化外,磁盘组提供的另一个重要功能就是数据的冗余,以便确保数据的安装性和高可用性。和传统的磁盘不同,Oracle镜像数据时通过failure group 的方式实现。failure group 是有一个或者多个磁盘构成整体,它是磁盘组的一部分,Oracle保证每个extent和他对应的镜像不会保存在相同的failure group 中,从而确保了当failure group 中的某个或者多个磁盘,甚至整个failure group 全部丢失也不会有数据丢失,并实现了数据的镜像。
如果创建磁盘组时候制定了 failure group ,数据以AU为单位,在failure group 之间实现镜像;如果创建磁盘组没有指定failure group ,那么每一块磁盘就作为一个failure group ,以AU为单位对数据进行镜像。
磁盘组的冗余度被划分为以下3种:
1)外部冗余(External redundancy):数据没有镜像。这种情况适用于已经使用底层存储软件对数做过镜像。
2)普通冗余 (normal redundancy):1路镜像。
3)高冗余(High redundancy): 2 路镜像。
1.2.4)rebalance
ASM磁盘组中的数据时均匀分布在每一块磁盘上,当磁盘组的磁盘成员列表发生改变时,数据就需要被重新分布,以确保数据能够均匀的分布在每一块磁盘上。
rebalance 的过程实际上就是数据重新分布的过程。
1) 默认情况,rebalance过程会在磁盘成员列表发生变化时自动触发。但是也可以通过手动的方式发起。
2)rebalance是在磁盘组级别进行的,而且每个磁盘组同时只有有一个ASM实例对进行rebalance操作。
3)磁盘组内部,rebalance是以文件为单位,即ASM保证的数据均匀分布是指每个ASM文件上的数据会被平均分布到磁盘组所有的磁盘上。
4)rebalance操作的时间长短和I/O开销取决于需要移动的数据,以及并发进程数量。
5)用户可以根据需要暂停运行中的rebalance操作,在恢复之后rebalance会从暂停的位置继续运行,而不是重新开始一个新的rebalance过程。
exportORACLE_SID=+ASM
sqlplus / assysdba
show parameterpower
2: ASM 实例
ASM 实例 是Oracle 实现对 ASM 磁盘组和磁盘管理的方式。它的结构和普通的数据库实例结构一致,由内存结构和后台进程组成。
内存结构由SGA和PGA组成,主要负责保存ASM磁盘相关的定义信息及磁盘组的元数据。
后台进程负责管理ASM的源数据,并与数据库实例进行通信,为数据库提供存储服务。
2.1 初始化参数文件
ASM有一个初始化参数文件(spfile)定义ASM实例相关参数,与数据库实例类似。默认情况,ASM初始化参数也是保存在ASM磁盘组,具体的参数初始化参数文件位置可以从 gpnp profile中找到。
获取 gpnp profile信息
gpnptool get
ASM实例常用的初始化参数:
1)Memory_target :同数据库实例
2)Instance_type :用于定义实例的类型,这个参数设置为ASM。
3)asm_diskstring : 指定ASM实例搜索磁盘的路径。支持多个搜索路径。
4)asm_diskgroups: 指定ASM实例启动后,会自动挂在哪些磁盘组。
5)asm_power_limit :指定磁盘组 rebalance 时的并行度。范围:0~11,
11.2.0.2 开始,最大可设置为1024.
2.2 内存结构
由SGA+PGA构成。
SGA包括Share pool、buffer cache 、Large pool等
2.3 后台进程
ASM实例的后台进程和数据库实例大致相同。
ASM实例特有进程:
1)GMON(ASM Disk Group
Monitor):磁盘组监控进程。这个进程负责维护磁盘组中的各个磁盘状态的一致性。比如 添加、删除 、离线、上线等操作
2)RBAL(ASM Rebalance Master): Rebalance 主进程,负责协调磁盘组的rebal-ance操作。而具体的平衡磁盘组 Extent的操作由ARBn进程完成。数据库实例中也存在RBAL进程,它的功能和ASM实例中的RBAL不同,负责为数据库管理ASM磁盘。
3)ASMB:该进程负责和ASM实例进行通信,并且为ASM的客户(asmcmd,数据库,OCR),提供链接ASM实例信息。
2.4 ASM实例启动顺序
1)从gpnp profile 读取 ASM spfile ,获取实例启动必须的参数。
2)根据spfile 设置分配SGA,并启动后台进程。
3)根据spfile中的asm_diskstring指定的位置检索磁盘,挂在ASM磁盘组。