Flutter开发App的未来及其在各行业的应用潜力分析
947
2022-11-29
ASM原理(1)
Oracle文件系统的历史
最早的时候Oracle是使用操作系统的文件来存储数据的。最简单就是安装单实例数据库,之后在里面建立一些表空间和数据文件。这种方式是最古老最方便的方式。
Oracle作为软件安装在操作系统下面,它的I/O大多时候是通过操作系统的I/O。
这里有有些问题,操作系统有它的I/O机制,有自己的文件系统。比如在Linux下有ext4文件系统。每次Oracle去读取这个数据文件的时候,会调用操作系统的机制来完成I/O,所以在数据库在内存和磁盘之间有一个操作系统在中间。对于性能比较高的数据库来说这样不太好,操作系统再处理一遍会影响数据块读取和写入的速度。为了改变这个就使用裸设备。
裸设备就是操作系统下面不用文件系统了,如ext4,不需要经过操作系统的文件系统,自己直接去访问磁盘设备。比如在Linux下面通常设备的路径是/dev/sdbN,裸设备就是Oracle直接去访问这个设备了,而不通过文件系统的方式去访问数据文件。虽然这样,但是裸设备还是没有完全绕过操作系统。因为最终这些设备的接口还是通过操作系统的一种驱动在链接。
首先设备要被操作系统所认识,设备的驱动还是由操作系统来管理的,这个时候数据库就通过驱动去访问设备了,就不通过文件系统去访问了。这个时候就比通过文件系统去访问效率高一些。使用裸设备创建数据文件就使用设备名字,没有操作系统的绝对路径。表空间的数据文件是操作系统下面的一个设备了。裸设备提高了I/O处理能力,因为绕过了文件系统。不好的地方就是每一个文件就是一个设备,一个表空间就至少有一个文件,一个表空间就要有一个设备,所以这是一个问题,还有一个问题就是裸设备不是文件系统下面的一个文件,备份的时候就不能备份了,裸设备在文件的扩展性和管理性上面都非常的不好。比如裸设备只有60G,超过了60G又要加一个设备。尽管裸设备性能还行,但是管理起来都十分的不方便。
ASM就是Oracle会使用Oracle自己的方式去管理文件。即Oracle自己做了一个文件系统,而不再使用裸设备和操作系统的文件系统。Oracle认为自己的ASM文件系统要比操作系统自己的文件系统更加好管理更加高效。
OCFS是跟着RAC的出而出现的。RAC就是多个实例共享一个存储,这个存储是一个共享方式的。这个文件系统不是对于单个机器的文件系统,这个文件系统是共享方式的。因为存储是最终要对里面数据文件进行管理的,所以里面的文件系统就叫OCFS,OCFS和普通文件系统如EXT3比起来,OCFS文件系统的文件是可以在多台服务器上面可以看到的,因为是集群上面的一个文件系统。
ASM和OCFS是差不多的,两个都可以以共享的方式去访问,OCFS更加接近操作系统层面的文件系统,在OCFS里面可以向操作系统文件那样访问它,但是ASM必须通过ASM的工具去访问。
在使用上来说还是ASM更加好一些,即使对于RAC这种架构来说,使用ASM比使用OCFS来说更加好使用。
ASM它是Oracle自己的文件系统,不再使用操作系统的文件系统,这样就对操作系统的文件系统都有一个提升。
集群文件系统就是在一个集群的环境下面RAC,ASM是一个很好的文件系统。可以有很多实例去访问ASM。卷管理就是ASM对存储的管理是非常强大的。
和普通文件系统比起来,ASM有很多优点,普通的文件系统要经过几层,要经过表,表空间,文件,文件系统(操作系统下面的文件系统,比如EXT3,通过文件系统来管理,文件系统如何来管理,文件系统还要来管理逻辑卷,逻辑卷下面还要对应物理卷,总之在文件系统下面来管理数据要经过很多层,导致性能比较低),逻辑卷,物理卷。在ASM里面,只需要将物理的东西直接扔给ASM,ASM就是一个实例,管着物理的磁盘组。
单实例ASM架构
ASM是架设在数据库实例和数据库文件之间的。
普通的数据库就是实例(内存加上后台的进程)通过后台的进程和磁盘做数据交换。普通的数据库就是实例加上磁盘。
有了ASM之后,数据库实例就不是直接面向存储了,不是直接面向物理文件了,而是由ASM来管理数据文件。数据库实例和ASM做数据交换,将指令发给ASM。这样就代替了以前的文件系统。以前数据库后台进程直接去访问磁盘文件,首先要调用操作系统的函数。然后通过操作系统的I/O机制来读取文件。
单实例ASM架构
ASM并不是只对一个数据库服务,比如一台服务器上安装几个数据库,比如安装了三个数据库,那么就是有三个数据库实例,那么这个ASM实例就可以同时向这三个数据库实例进行服务,就是三个数据库实例使用一个ASM实例。共用ASM实例访问底下的存储。-也类似,服务器上面有多个数据库实例,那么只需要一个-就可以了,可以为几个实例提供服务。
ASM后台进程
可以看到ASM架构和数据库架构相似,都是内存加上进程。中间是ASM实例的内存区,周围是ASM实例的进程。
ASM RAC架构
ASM服务不仅可以为单个数据库提供存储,还可以为多实例数据库提供存储。如图上面一样有三台服务器,每台服务器上面有两个数据库实例和ASM实例。每一个实例都有自己的ASM,这些ASM实例管理着下面这些存储。
RAC环境下面和单实例的的架构都差不多,只不过在RAC环境下面ASM实例的进程更加多一些,所以在RAC环境下面比普通数据库下面的ASM要多一些进程。
ASM实例
(1)ASM实例和数据库实例一样都有自己的初始化参数,ASM实例没有mount状态和open状态,正常状态只有started状态。
(2)数据库mount状态是指实例可以工作了,同时将SGA分给实例了而且后台进程开始启动了。Mount是指Oracle读取控制文件,从控制文件里面读取其他的文件。Open状态是Oracle做数据文件头部的一些检查,一致性检查,检查没问题之后数据库才会open。ASM只是一个服务,没有上面的数据库打开的过程。ASM只需要将实例起来和内存分配就行了。
(3)ASM只是通过实例来管理的,是通过初始化参数来启动的。
ASM实例VS数据库实例
ASM实例是更加底层的服务,用户直接访问数据库实例,由数据库实例直接转给ASM实例,ASM实例去处理数据。
ASM磁盘组
文件可以在几个磁盘上面创建,但是不能跨越磁盘组。
从ASM中添加和删除设备
一旦将磁盘做的磁盘组加到ASM里面不需要做任何的操作,ASM会将之前数据自动的将之前的数据分配到加入的磁盘当中。需要做一个平衡,将数据平均的分配到磁盘里面,这样的I/O才会好。
如果磁盘组坏了,要将其从ASM拿出去,上面drop语句就可以将磁盘组合asm分离。
数据在磁盘的分布管理
Metadata是元数据,不管是表还是段这些都有元数据,元数据就是用来描述表事物的一些属性。上面的图是最初一块磁盘不断的向里面加数据,数据在磁盘里面的分布。
当第一块磁盘的空间已经满了,那么再添加一块磁盘,那么数据就会重新分布到另外的磁盘上面。
数据重新分布,这样的目的就是让数据比较均匀的分布在磁盘上面。让磁盘的I/O达到平衡。
ASM管理不同大小的磁盘
如果有大小不一样的磁盘那么数据是如何分布的呢?
上面就是第0个磁盘大,第1个磁盘小。在第1个磁盘里面装写1次,那么就在第0个磁盘写2次,这样也能达到数据平衡。
如果不做reblance那么数据还是在之前的磁盘上面,那么I/O还是发生在之前的磁盘上。
如果有三块磁盘,坏了两块,或者说将这两块磁盘撤销下来。那么就需要将两块的数据移动到第一块磁盘上面。这个是磁盘减少数据重新分配的过程。
ASM reblance
上面是说数据在磁盘上面如何分布,reblance是指将数据重新的在磁盘面平衡。
上面操作都会对数据进行reblance,就是将数据在所有磁盘上面重新做一次分布。在重新分布的时候不仅仅是将数据进行重新分布,还将元数据在磁盘里面进行重新分布。新加入磁盘并不是向里面添加新的数据,而是将原来在磁盘上面的数据进行重新分布。
Reblance总结
将数据库关闭了之后可以做reblance,这样数据库实例不和ASM实例做交互,这样平衡会更加快一些。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~