(一)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,该实例