准备把ASM这部分好好捋一下,主要是学习ASM部分的官方文档,去掉一些废话,补充一些大佬的总结。也有看不太明白的地方,暂时先放原文。
参考的文档是19c版本:
本文是Part I Introduction。
官方这一部分主要还是让学习者对ASM有个框架式的了解
--db_create_file_dest参数指向+DATA磁盘组
SQL> show parameter db_create_file_dest
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
db_create_file_dest string +DATA
--无需指定datafile路径,自动创建在+DATA磁盘组下,目录自动
SQL> create tablespace xk;
Tablespace created.
SQL> select * from v$dbfile;
FILE# NAME
---------- ------------------------------------------------------------
1 +DATA/xkdb/datafile/system.259.1072125889
...
6 +DATA/xkdb/datafile/xk.268.1072399269
Oracle自动存储管理群集文件系统(ACFS)是一种多平台、可扩展的文件系统和存储管理技术,它扩展了ASM的功能,以支持所有用户文件。ASM动态卷管理器(ADVM)为客户提供卷管理服务和标准磁盘设备驱动程序接口。
下面介绍ASM的组件:
ASM元数据是ASM用来控制磁盘组以及存储磁盘组信息,包含:
图1-1 展示了具有一个ASM实例和多个数据库实例的单个节点配置。ASM实例管理元数据,并为ASM文件提供空间分配。当一个数据库实例创建时或者打开ASM文件,它将这些请求发送到ASM实例。ASM实例返回指向数据库实例的文件范围映射信息。多个数据库实例,但仅需要一个ASM实例就可以为多个数据库实例提供服务
图1-2 显示RAC环境中的ASM群集,ASM提供了集群存储池。在集群中服务于多个RAC或单实例数据库的每个节点都有一个ASM实例。
图1-3 多个单实例数据库共享ASM集群存储池,这种情况下多个数据库共享共用磁盘组。
磁盘组由多个磁盘组成,是OracleASM管理的基本对象
每个磁盘组都包含管理磁盘组中的空间所需的元数据
磁盘组组件包括:磁盘、文件和AU(allocation units)
任何ASM文件都完全包含在单个磁盘组中
磁盘组可能包含属于多个数据库的文件,并且单个数据库可以使用来自多个磁盘组的文件
镜像: 镜像通过将数据的副本存储在多个磁盘上来保护数据的完整性。
三个冗余级别:
冗余级别控制可容忍多少次磁盘故障,而无需卸载磁盘组或丢失数据。
同一个磁盘组中的两个文件AB,可以设置A镜像,B不镜像(见文档66页,这好像没什么意义)
故障组: 故障组用于放置数据的镜像副本,以使每个副本都位于不同故障组中的磁盘上。故障组中的所有磁盘同时发生故障并不会导致数据丢失。
在创建ASM磁盘组时定义磁盘组的故障组。创建磁盘组后,将无法更改磁盘组的冗余级别。
ASM磁盘可以是:
添加磁盘到磁盘组时,可以手工指定磁盘名或者ASM自动指定名字。这个名称不同于操作系统所使用的路径名称。在群集中,磁盘可以在不同节点上分配不同的操作系统设备名称,但该磁盘在所有节点上都具有相同的ASM磁盘名称。
ASM将文件分散分布在磁盘组中的各个磁盘上,这样每个磁盘保持在相同的容量级别,并确保磁盘组中的所有磁盘都具有相同的I/O负载。由于ASM在磁盘组中所有磁盘之间的负载平衡,因此不同的ASM磁盘不应共享相同的物理驱动器。
AU是磁盘组内的基本分配单元,一个extent由一个或多个au组成,ASM里的文件又由extent组成
ASM文件系统:file --> extent --> au 普通文件系统:segment --> extent --> block
创建磁盘组的时候指定AU大小,可选值有:1, 2, 4, 8, 16, 32, 64 MB,至于大小的选择文档上说依赖于磁盘组的compatibility level。数据仓库通常使用较大的AU。
存储在ASM磁盘组中的文件称为ASM文件
每个ASM文件都包含在单个OracleASM磁盘组中
存储在ASM中的文件类型:
ASM会自动生成ASM文件名,作为文件创建和表空间创建的一部分。ASM文件名以+开头,后面是磁盘组名。另外可以为ASM文件创建别名,并为这些别名创建分层目录结构。
--使用mkalias命令创建别名,help查看详细
ASMCMD> help mkalias
Extent由一个或多个AU组成 Extent不能跨磁盘 ASM使用了可变大小的区(variable size extents) variable size extents 允许支持更大的ASM数据文件,减少了对非常大的数据库的SGA内存需求,并提高了文件创建和打开操作的性能。Extent初始大小等于AU大小,可增加4或16倍。
对于AU大小小于4MB的磁盘组:
下面这块没明白是什么意思,先放上原文:
For disk groups with AU size greater than or equal to 4 MB and the disk group RDBMS compatibility greater than or equal to 11.2.0.4, the counts for extents of sizes (the disk group AU size, 4*AU size, or 16*AU size) are calculated using the application block size to support maximum file size. The extent sizing feature is automatic for newly created and resized data files when specific disk group compatibility attributes are set to 11.1 or higher. For information about compatibility attributes, see Disk Group Compatibility.
图1-4 显示Extent跟AU的关系。前8个Extent(0~7)分布在四个ASM磁盘上,等于AU大小。20000个extents之后就变成了4倍AU大小。
ASM会将文件划分为条带,并将数据均匀地分布在磁盘组中的所有磁盘上。
条带化主要目的:
粗粒度条带(Coarse-grained striping)为磁盘组提供了负载均衡,大小为128KB,降低了 small I/O operations 的I/O延迟 细粒度条带(fine-grained striping)则通过更广泛地扩展负载来减少某些文件类型的延迟(还得再品品),大小等于AU大小
下面通过两张图介绍条带化,图上均为由8块磁盘组成的磁盘组,AU大小为1M,使用A-X两种字体标记文件的条带块(striping chunks)
图1-5 图上可见的是ASM文件被划分为128k每个的条带块,一个AU是1024k,可以容载8个条带块。从磁盘1中的第一个块开始,然后是磁盘2中的第一个块,然后以循环模式贯穿所有磁盘,直到整个文件被条带化。另外图上虚线框起的代表上面说的可变大小区,2-4万之间的extent,extent就变成4倍AU大小了。
图1-6 也是用A-X不同字体标记条带块,这里每个条带块是1M大小,等于AU的大小。循环存储到磁盘的时候,正好1个AU存储1个条带块。
模板是属性值的集合,用于在创建ASM文件时指定磁盘区域、文件镜像和条带化属性。
创建文件时,可以包含模板名称,并根据单个文件而不是文件类型分配所需的属性。
每种Oracle文件类型都有一个默认模板,可以自定义模板。每个磁盘组都有一个与每个文件类型关联的默认模板。
这一块是简单介绍磁盘组管理,不涉及具体操作
就是定位ASM可使用的磁盘。相关参数是ASM_DISKSTRING,在启动ASM实例的时候会发现和检查该路径下的磁盘。
数据库实例访问ASM中的文件,首先需要由ASM实例挂载磁盘组。
ASM文件被使用中,卸载磁盘需要强制卸载。
要添加的磁盘需要在ASM_DISKSTRING参数指定的路径下,而且需要在每个ASM实例下都能被发现。磁盘被添加到磁盘组后,ASM会重新平衡操作会将数据移动到新磁盘上。
如果在写入磁盘时发生错误,则ASM会自动删除该磁盘。
重新平衡磁盘组会在磁盘之间移动数据,以确保每个文件均匀地分布在磁盘组中的所有磁盘上。
当所有文件均匀分散时,所有磁盘都均匀填充到相同的百分比,实现负载平衡。
重新平衡不会基于I/O统计信息重新定位数据,也不会基于I/O统计信息开始重新平衡。ASM重新平衡操作由磁盘组中的磁盘的大小来控制。
存储配置更改后,ASM会自动启动重新平衡,例如添加、删除或根据磁盘大小调整磁盘。参数asm_power_limit确定重新平衡操作发生的速度。
手工重新平衡:
alter diskgroup DATA rebalance power 3;
如果正在运行重新平衡的实例停止,则会自动重新启动重新平衡。在重新平衡操作期间,数据库可以保持运行。
在配置ASM之前,应考虑有关存储子系统的几个问题。
可以使用以下存储资源创建ASM磁盘组:
ASM存储资源准备步骤:
多路径就是提供多条物理路径,避免单条链路故障导致无法读取磁盘信息,冗余的路径存在与服务器和存储子系统之间。
这块与之间写的【多路径】CentOS7.7下使用Openfiler+Multipath+UDEV 相关
当I/O被发送到设置好多路径的磁盘设备时,多路径驱动程序会拦截它,并为底层子路径提供负载平衡。