作者:周鹏
ASM(自动化存储管理)是Oracle数据库的一个特性,作为专门为Oracle数据库文件创建的垂直集成文件系统和卷管理器,ASM提供了直接异步I/O的性能以及文件系统的易管理性。无论是Oracle数据库用户还是数据库管理员想必对ASM都有所耳闻甚至能够熟练使用,但是对于大部分人,使用ASM时,ASM就像是一个黑盒,给人一种神秘的感觉。"知其然,知其所以然",对待技术唯有如此,才能有更大提高。近段时间看了《Oracle内核技术揭秘》一本好书,感谢作者的付出,自己收获很大。所以今天让我们从ASM文件开始,掀起ASM黑盒的一角,来窥探一下Oracle的一些底层设计。
ASM上存储的文件分为两大类:元文件和具体的数据文件。元文件上存放元数据,保存ASM中各种配置,状态数据,比如所有以v$asm_开头的视图信息都来自于源文件。具体的数据文件是Oracle存放的各类文件:数据文件,重做日志文件,归档日志文件等等。针对每一个文件,在ASM中都有一个编号file_number,作为索引号,索引号从1开始,1~255号文件,都是元文件,从256号开始之后是数据库的各类文件。如下图,在我的虚拟机数据库上,第一个是256号控制文件,第二个是257号system数据文件。
ASM上的文件中,最重要是1号文件,它包含了所有文件的磁盘分布信息,包含元文件等,甚至是1号文件自身的空间分布信息也都存在1号文件内部。每个文件在它里面至少占用一个块(元数据块为4KB)的空间。
在通常情况下,ASM的1号文件总是在磁盘组0号磁盘的2号AU处开始(插播一个概念:ASM的最小存储单位是一个AU(allocation unit))。0号盘2号AU:这是ASM定位文件的起点,Oracle就是从这个位置入手查找文件。
在最少情况下,1号文件至少有两个AU。刚才提到,1号文件中,每个文件占用一个元数据块,用来存放自身空间分布信息。每个元数据块4K,一个AU默认是1MB,1号文件的每个AU中可以存储256个文件的空间分布信息。1号文件最少两个AU,所以可以存放512个文件的空间分布信息。这其中,第一个AU,正如上面所说,一般在0号盘2号AU,这个AU中全是元文件信息。它里面第一个数据块被系统占用,从第二块开始到255为止,分别对应1~255号文件,也就是全部的元文件。在1号文件第二个AU中,第一个块保存256号文件的AU分布,第二个块对应257号文件的AU分布,依次类推。ASM读取数据时,Oracle会先读取1号文件,从中获得要读的目标文件在磁盘上的分布信息,然后再去读相应文件的数据。
上边的描述读起来是不是很绕,相信很多人还是云里雾里,没关系,让我们看一下下面这幅图,有助于大家的理解。
首先插播一个工具——kfed,kfed是Oracle提供的分析ASM的一个工具,其功能非常强大,利用这个工具我们可以读取ASM上数据块的信息,从而能让我了解ASM文件的磁盘分布。
下面让我们通过kfed这个工具,来切实的验证一下上边的理论。如下图显示,本人虚拟机上的数据库环境,有两个磁盘组,选取磁盘组1,该盘组下有1块磁盘,为0号磁盘disk1:
我们选取一个5M数据文件,其在ASM中对应的索引号为268。
大家是不是会有疑问呢?假设有个数据文件非常大,AU个数特别多,多到一个块放不下了,Oracle的底层又是怎么设计处理的呢?感兴趣的朋友可以根据上面的内容,研究分析一下,欢迎在文章下讨论~~
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞1
添加新评论0 条评论