Oracle体系结构简要介绍 下载本文

Word模板样式

3.6 归档进程(ARCN)

Archive (ARCN)归档操作或归档进程,它的作用是发生日志切换时把写满的联机日志文件拷贝到归档目录中。

触发条件是:日志切换时被LGWR唤醒。

4. oracle中三大文件介绍

oracle中的三大文件分别是:数据库文件(*.dbf)、控制文件(*.ctl)和日志文件(*.log)。

数据文件。

4.1 数据文件(dbf)

数据文件中存放的是用户提交后的相关数据,都是commit提交后实实在在的数据。

4.2 控制文件(ctl)

控制文件中存放了一个数据库的物理结构信息(包括数据库有多少个数据文件,分别存放在哪里等信息),数据库当前运行的状态信息等。

4.3 日志文件(log)

日志文件中存放的是oracle用户对数据库所做的所有的操作,全部会以日志的方式记录到数据文件中,也就是说日志文件里面记录着数据文件的每一个数据库所有变化的过程。

5. 用户进程介绍(server process)

当用户访问数据库的时候就会创建一个server process,并且为server process 创建一个PGA内存。Server process 是实例的一个进程。

从DBF中将数据读取到buffer cache中这个过程是由server process来完成的。 DBWN和LGWR都是后台进程,server process 是前台进程,也就是说server process只是负责将数据从DBF中读取出来存放在内存中进行修改,将内存(buffer cache)中的数据写回DBF不是server process来完成的,而是由有DBRN来完成的。Server process是直接为用户服务的,用户把SQL语句给了server process,然后server process做了以下几件事情:第一、对SQL语句进行解析,将SQL语句变为执行计划;第二、然后去执行解析好的执行计划;第三、获取相关数据,将数据存放在buffer cache中;第四、将获取到存放在buffer cache中,最后将buffer cache中的数据返回给用户。

第 5 页/共 9页

Word模板样式

SQL语句对标的修改都是在内存里面修改的,通过server process来完成,所有的日志都是server process产生的。 将修改完成的数据从内存(buffer cache)写入到数据文件DBF中是由DBWn来完成的,DBWN进程负责将server process修改的数据写回磁盘,DBWN是后台进程,server process是前台进程。Server process 只负责读取数据,server process是直接给用户提供服务的,要是server process慢的话用户就会感觉数据库比较慢,所以我们希望server process做最有意义的事情,后台进程能做的事情尽量给后台进程来完成,不要给server process来完成。

6. SQL语句的执行过程

客户端录入SQL语句,通过网络到达数据库实例,server process 就收SQL语句,然后将SQL语句解析为执行计划,最后oracle拿着执行计划去操作数据,将最终的结果保存在buffer cache中。

SQL语句执行的第一步是解析,解析的时候消耗很多资源,包括内存资源,IO资源,CPU资源,最主要消耗的是内存资源。计算机的三大资源包括:CPU、IO、内存资源。

SQL语句的解析以及执行计划的缓存、shard pool的访问,都是有server process 来做的。 Server process 执行SQL语句获取数据的时候,它首先找的是buffer cache,如果buffer cache中没有找到他要找的相关数据,然后从DBF中把数据取出来,取出来后不是直接把数据返回给用户 ,而是将数据存储在buffer cache中,最后将buffer cache中数据返回给用户。

解析SQL语句步骤包括:第一、首先server process 来判断SQL语句的语法有没有问题,如果有问题就不会执行下面的相关操作;第二、判断SQL语句所访问的资源是否有权限;第三、判断SQL语句所访问资源是否存在;第四、判断SQL语句该怎么去执行,一条SQL语句有N种执行方案,server process从这N种方案中选择一个最有的方案来执行。

7. 逻辑IO和物理IO的区别

逻辑(login)IO指的是server process 执行SQL语句的时候,首先读取buffer cache,判

断是否有请求的数据,如果有那么就会直接从buffer cache中读取数据,这种读叫做逻辑读,也叫内存读。

物理(physice)IO指的是server process在buffer cache 中找不到数据的时候就要从DBF中读取数据,这个读叫做物理读,物理读也叫磁盘读。

8. 命中率

命中率指的是不需要进行磁盘访问的情况下在内存结构中找到常用数据块的频率。 命中率的计算方式:逻辑读除以逻辑读jia物理读(L/(L+p)),命中率越高说明逻辑读越大,命中率越低说明物理读越大,对于oracle数据库来说,命中率低一定有问题,但是命

第 6 页/共 9页

Word模板样式

中率高不一定没有问题,可以参考《Oracle检查命中率的相关知识》进行观察。

在linux中查看命中率的命令是 vmstat 1 10 和 iostat 10,其中iostat中有个tps的参数,它的值就是每秒传输的速度,Blk_read/s物理读的速度,Blk_wrtn/s物理写的速度,Blk_read读的总数,Blk_wrtn写的总数。

9. 缓冲区的状态

缓冲区的状态包括:已连接、干净、空闲(未使用)和脏几种类型。内存和DBF中数据

一致的话我们叫做干净,没有使用的内存叫做空闲,内存和DBF中的数据不一致的时候把内存中的数据叫做脏数据,当内存中有脏数据将要写入到DBF中,在写和正在读的这一瞬间我们叫做ping(已连接)住了。

缓冲区优先使用的是空闲或未使用的,接着就是干净的,全部是脏的时候就会触发DBWR,将脏的数据写入磁盘,对脏的不能覆盖。

10. 服务器进程

服务器进程首先会到数据库文件中读取数据处理,服务器进程读取数据的时候首先会到SGA数据库缓冲区高速缓存(buffer cache)中找数据,有的话直接返回给用户,没有的话再到数据库文件中读取,同时服务器进程也会修改SGA数据库缓冲区高速缓存中的数据。服务器进程对buffer cache进行读和写,buffer cache 写回数据文件由DBWN进程来完成的。

Oracle 简单来说是由六大池子,六大进程,三大文件组成。六大池子包括:shard poll(共享池),streams poll (streams池)、large pool(大型池)、java pool(java 池)、buffer cache(数据库缓存区高速缓存)、redo log buffer(重做日志缓冲区);六大进程指的是:数据库写进程(DBWN)、日志写进程(LGWR)、检查点进程(CKPT)、进程监视器(PMON)、系统监视器(SMON)、归档进程(ARCN);三大文件包括:数据文件(dbf)、日志文件(log)、控制文件(ctl)。

第 7 页/共 9页

Word模板样式

第 8 页/共 9页