Oracle 体系结构简述

一、 Oracle数据库简介

    Oracle数据库主要有三个重要的概念:实例(instance)、数据库(database)、数据库服务器(database server)。

    下图是官方文档中Oracle的体系结构。依次来说明下。


    1. 实例

        实例是一组oracle的后台进程(background process)以及在服务器中分配的共享存储区域(SGA,system global area)。实例是用来控制和管理数据库的。在这张图中,将用户进程(PGA,process global area)也划入了实例的范畴。

           (1) SGA

                    SGA也称为系统全局区,是所有用户进程共享的一块内存区域,即SGA可以被多个用户进程使用。SGA主要由高速数据缓冲区(database buffer cache)、共享池(shared pool)、Java池(Java pool)、重做日志缓冲区(online redo log buffer cache)、大型池(large pool)等组成。

                    a. 高速数据缓冲区

                        高速数据缓冲区中存放着最近访问过的数据块。例如,当用户向数据库发送请求,希望查询某条数据的时候,如果在告诉缓冲区有记录的话,会直接从高速缓冲区中读取并返回给用户,否则的话,需要从数据文件中读取。

                        若高速缓冲区没有需要检索的数据,Oracle就会从数据文件相对应的数据块到缓冲区,然后从缓冲区将数据返回给用户。(因此,所有用户检索到的数据都是从内存中得到的,并不是直接从数据文件中获取。)由于SGA被所有用户公用,因此常被检索的数据块会被放置到缓冲区的前部,不常被访问的数据块会放置到后部,当缓冲区填满时会删除后部的一些不常用的数据块。

                        若用户对数据库进行DML操作时,更新后的数据将会先被保存到缓冲区中。那这部分数据块被称为“脏数据”,即没有被写入数据文件的数据,在提交后,通过DBWn进程写入数据文件。

                        优点:加快检索效率,减少磁盘IO。

                    b. 重做日志缓冲区

                        重做日志缓冲区用来缓存用户对数据库进行的修改时产生的日志信息。在被后台进程LGWR写入日志文件前,先保存在缓冲区中。

                    c. 共享池

                        共享池主要分为库高速缓冲区(library cache)和字典高速缓冲区(dictionary cache)。

                        库高速缓冲区用来缓存执行过的SQL语句。当重复执行SQL语句时,oracle系统直接从该缓存区中直接得到检索结果,从而提高系统执行效率。

                        字段高速缓冲区是用来缓存Oracle系统内部管理所需要的数据字典信息,例如用户名、数据对象、权限等等。

                    d. 大型池

                        非必须的内存结构。在一些特殊情况下,实例需要使用大型池来减轻共享池的访问压力。

                    e. Java池

                        提供内存空间给Java程序包使用。

         (2)Background Processes

                可以通过命令 “ps -ef | grep ora_”来查看后台进程。

                a. 数据库写入进程(DBWn)

                    可以有多个数据库写入进程。主要任务是将“脏数据”写入到数据文件中。Oracle这样做的目的是减少数据库的I/O操作,提高Oracle服务性能。可以通过修改SPFILE中的DB_WRITER_PROCESSES参数来调整进程数量,但一般不能超过服务器的处理器数量。

                    当满足以下条件时回触发DBWn进程:

                    · 数据库高速缓冲区已满,无空间存放新数据。

                    · 触发检查点进程。

                    · 脏数据在数据库高速缓冲区中存放的时间超过3s钟。

               b. 检查点进程(CKPT)

                    当满足检查点的条件时,CKPT会要求DBWR进程将脏数据写入数据文件。

               c. 日志写入进程(LGWR)

                    日志写入进程是将重做日志缓冲区的内容写入日志文件中。Oracle系统是先将修改信息写入日志文件,再将修改结果写入数据文件。当所有日志文件都写满,LGWR进程会转向第一个日志文件,覆盖其原有内容。

                    当满足以下条件时触发LGWR进程:

                    · 执行commit命令

                    · 重做日志缓冲区满1/3

                    · 日志信息存放超过3秒钟

                d. 归档进程(ARCH)

                    当数据库处于归档模式时才会启动。

                    当日志文件写满需要覆盖原有文件内容时,就会触发ARCH进程,将原有的日志文件进行归档,即将将被覆盖的日志信息读出,并存放至归档文件中。

                e. 系统监控进程(SMON)

                    当数据库意外宕机,事务未提交时,SMON进程会尝试恢复数据库,利用重做日志文件进行前滚,打开数据库,提交宕机前未提交的事务。

                f. 用户服务进程(PMON)

                   当用户连接结束或者失败时,会清理失败的用户进程,释放用户连接的资源。


2. PGA(Process Global Area)

    当用户客户端连接至Oracle Server时,启用的就是用户进程全局区。他的内存是私有的而不像SGA那样是共有的。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值