精华内容
下载资源
问答
  • Oracle体系结构详解

    2021-02-24 18:07:19
    二、交互流程 三、实例内存结构和进程结构四、Oracle存储结构五、总结首先我们来说说基础的概念吧众所周知,OracleDataBase是一款关系型数据库管理系统(不了解何谓关系型数据库的童鞋自行google,baidu),同类的...
  • oracle 体系结构详解 一体系结构图 oracle 实例=SGA 区+后台进程 oracle 服务器=oracle 实例+oracle 数据库 数据库实例启动实质上即为分配SGA 区启动后台进程 Oracle 实例 1是访问Oracle 数据库的一种方式 2通常只开...
  • oracle 体系结构详解

    2015-06-30 17:43:01
    oracle体系结构图文详解。 oracle实例=SGA区+后台进程 oracle服务器=oracle实例+oracle数据库 数据库实例启动实质上即为:分配SGA区,启动后台进程
  • Oracle 体系结构详解

    2021-01-25 21:28:42
    Oracle的体系结构大体上分为两部分:Instance(实例)和Database(数据库)。...Oracle体系结构 我们平时说的Oracle Server(Oracle服务器)就是由Oracle Instance和Oracle Database组成的,如下图:

    目录

    Oracle Instance

    Database


    正文


    Oracle的体系结构大体上分为两部分:Instance(实例)Database(数据库)


    如图1所示:
    在这里插入图片描述

    图1 Oracle 数据库体系结构

    我们平时说的Oracle Server(Oracle服务器)就是由 Oracle Instance 和 Oracle Database 组成的,如图2:
    在这里插入图片描述

    图2 Oracle Server

    Oracle Instance
    Instance中主要包含 SGA 以及一些 Backgroud Process (后台进程)(例如:PMON、SMON、DBWR、LGWR、CKPT等)。


    SGA

    SGA包含6 个基本组件:Shared Pool(Library Cache,Data Dictionary Cache)、Database Buffer Cache、Redo Log Buffer、Java Pool、Large Pool、stream pool。

    下面将分别介绍这6个基本组件的功能。

    1) shared pool(共享池)

    • 共享池是对 SQL、PL/SQL 程序进行语法分析、编译、执行的内存区域。

    • 共享池由 Library Cache(库缓存)、Data Dictionary Cache(数据字典缓存)和 Server Result Cache(结果缓存)等组成。

    • 共享池的大小直接影响数据库的性能。

    Shared Pool 的各组成部分有哪些作用呢?

    • Library Cache: SQL 和 PL/SQL 的解析场所,存放着经过编译解析后的 SQL 和 PL/SQL 语句的内容,以备所有用户共享。

      * 下次再执行同样的 SQL 语句的时候,就不需要解析了,立即从 Library Cache 获取执行。

      * Library Cache的 SIZE 会决定着编译解析 SQL 语句的频度,从而决定了性能。

      * Library Cache中又包含两部分内容:Shared SQL Area 和 Shared PL/SQL Area。

    • Data Dictionary Cache: 存放重要的数据字典信息,以备数据库使用。

      * Data Dictionary 是使用最频繁的,几乎所有的操作都需要到数据字典去查询。为了提高访问 Data Dictionary 的速度,此时需要一个 Cache,需要的时候访问内存即可。

      * Data Dictionary Cache 里面的信息包含了 Database Files、Tables、Indexes、Columns、Users、Privileges 和其他的数据库对象。

    • Server Result Cache: 存放服务器端的 SQL 结果集及 PL/SQL 函数返回值。

    看了上面的讲解,或许会觉得有些抽象,下面将通过一个例子进行讲解。

    假设在客户端提交一个命令,如下:

    SELECT ename,sal FROM emp WHERE empno=7788;
    

    如果数据库是第一次被提交这条语句,则需要进行解析,解析过程分为硬解析软解析

    • 硬解析:检查语法、语义、权限,分析绑定变量等,最终生成一个执行计划
    • 软解析:依据执行计划去具体执行它。若是 select 语句,执行完后还会返回结果集,若是 update、delete 语句则无需返回结果集。

    Library Cache会把这条 sql 语句和执行计划装入其中。

    装入这些东西有什么作用呢?

    下次再敲一模一样(标点符号、大小写、空格完全一致)的语句时,就不需要硬解析了。
     
    小问答:
    如果此时客户端再提交一条命令:

    select ename,sal from emp where empno=7788

    猜测一下,这条语句需要被解析吗?
    答案:需要。
     
    小说明:注意哦,语句必须完全一样才不需要解析哦。标点符号、大小写、空格等都要完全一致哦!平时规范书写的好处在这里就体现啦。

    前面有说到,若是 select 语句,执行完后还会返回结果集。那结果集存放在哪里呢?

    select ename,sal from emp where empno=7788

    该语句执行返回的结果集将存放在 Server Result Cache 中。

    2) Database Buffer Cache (数据缓冲区)更多内容

    • Database Buffer Cache 用于存储从磁盘数据文件中读入的数据,为所有用户共享。
    • Server Process(服务器进程)将读入的数据保存在数据缓冲区中,当后续的请求需要这些数据时可以在内存中找到,则不需要再从磁盘读取。
    • Database Buffer Cache 的大小对数据库的读取速度有直接的影响。

    小说明:逻辑读(从内存读)的速度是物理读(从磁盘读)的1万倍呦,所以还是想办法尽量多从内存读哦。

    例如用户访问一张表里面的记录时,数据库接收到这个请求后,首先会在 Database Buffer Cache 中查找是否存在该数据库表的记录,如果有所需的记录就直接从内存中读取该记录返回给用户(有效提升了访问的速度),否则只能去磁盘上去读取。

    继续看上面的例子:

    select ename,sal from emp where empno=7788

    该条语句以及它的执行计划被放在 Library Cache 里,但语句涉及到的数据,会放在 Database Buffer Cache 里。

    小问答:
    Database Buffer Cache是怎么工作的呢?
     
    这就要说一说 Database Buffer Cache 的设计思想了。
    磁盘上存储的是块(block),文件都有文件号,块也有块号。
    若要访问磁盘上的块,并不是 CPU 拿到指令后直接访问磁盘,而是先把块读到内存中的 Database Buffer cache 里,生成副本,查询或增删改都是对内存中的副本进行操作。如图 3 所示。
    另外,如果是增删改操作,操作后会形成脏块,脏块会在恰当时机再写回磁盘原位置,注意哦,可不是立刻写回呦。
     
    也许你会问,为什么不立刻写回呢?
    因为:
    (1)减少物理 IO ;
    (2)可共享,若后面又有对该块的访问,可直接在内存中进行逻辑读。

    在这里插入图片描述

    图3 访问磁盘块

    小问答:
    为什么要通过内存访问数据块,而不是 CPU 直接访问磁盘呢?
    答:因为相较于 CPU,IO 的速度实在是太慢了,CPU 的速度是 IO 的100万倍呢?如果 CPU 直接访问磁盘的话,会造成大量的 IO 等待,CPU 的利用率会很低。所以,利用速度相当的内存(CPU 速度约为内存的100倍)做中间缓存,可以有效减少物理 IO,提高 CPU 利用率。

    但是,这里会有一个问题。前面说到查询或增删改都是对内存中的副本进行操作,当增删改操作产生脏块时不会立刻写回磁盘。

    小问答:
    我们设想一下,如果在 Database Buffer Cache 中存放大量未来得及写回磁盘的脏块时,突然出现系统故障(比如断电),导致内存中的数据丢失。而此时磁盘中的块存放的依然是修改前的旧数据,这样岂不是导致前面的修改无效?
     
    要怎样保持事务的一致性呢?
    答:如果我们能够保存住提交的记录,在 Database Buffer Cache 中一旦有数据更改,马上写入一个地方记录下来,不就可以保证事务一致性了嘛。

    小说明:Instance 在断电时会消失,Instance 在内存中存放的数据将丢失。这就需要 Redo Log Buffer 发挥它的作用啦。

    3)Redo Log Buffer (重做日志缓冲区)

    • 日志条目(Redo Entries )记录了数据库的所有修改信息(包括 DML 和 DDL),一条 Redo Entries 记录一次对数据库的改变 ,为的是数据库恢复。日志条目首先产生于日志缓冲区。
    • 日志缓冲区较小,它是以字节为单位的,它极其重要。
    • 在 Database Buffer Cache 中一旦有数据更改,马上写入 Redo Log Buffer,在内存中保留一段时间后,会写入磁盘,然后归档(3级结构)。

    在这里插入图片描述

    图4 三级结构

    4) Large Pool (大池)(可选) * 为了进行大的后台进程操作而分配的内存空间,与 shared pool 管理不同,主要用于共享服 务器的 session memory,RMAN 备份恢复以及并行查询等。

    5)Java Pool (Java 池)(可选)

    • 为了 java 虚拟机及应用而分配的内存空间,包含所有 session 指定的 JAVA 代码和数据。

    6)Stream Pool (流池)(可选)

    • 为了 stream process 而分配的内存空间。stream 技术是为了在不同数据库之间共享数据,
      因此,它只对使用了 stream 数据库特性的系统是重要的。

    Background process

    在正式介绍 Background Process 之前,先简单介绍 Oracle 的 Process 类型。

    Oracle Process 有三种类型:

    • User Process
      * 属于客户端的 Process,客户端要与服务器连接,在客户端启动起来的进程就是 User Process ;
      * 一般分为三种形式(sql*plus, 应用程序,web 方式(OEM));
      * User Process 不能直接访问Oracle 。

    • Server Process
      * 属于服务器端 Process,用于接应User Process 发出的请求;
      * 给用户分配 PGA(程序全局区)。

    • background process
      Oracle Instance的重要组成部分。下文会对其做详细讲解。

    【User Process 不能直接访问 Oracle,必须通过相应的 Server Process 访问实例,进而访问数据库。】

    小补充:
    Connection & Session
    Connection是指一个Oracle的客户端和后台和后台的进程(Server Process)建立的TCP连接。如图 5 所示:

    在这里插入图片描述

    图5 Connection

    Connection 建立过程可简单描述如下:

    1.首先建立 TCP 连接,Oracle 对用户的身份进行认证、进行安全审计等等;
    2.当这些都通过后, Oracle 的 Server Process 才会允许客户端使用Oracle提供的服务;
    3.当 Oracle 的连接建立起来以后,就意味着开始了一个 Session (会话),当连接断开的时候这个会话就消失了。

    【用户登录到 Oracle Server 就是 User Process 和 Server Process 建立Connection。】

    Session 是和 Connection 相辅相成的。Session信息会存储在 Oracle 的 Data Dictionary 中。
    可通过图 6 直观看出 Connection 和 Session 的区别。

    在这里插入图片描述

    图6 Connection & Session

    Background Process(后台进程)主要包括:PMON(进程监控器进程)、SMON(系统监控器进程 )、DBWR( 数据库写入程序进程)、LGWR(日志写入程序进程)、CKPT(检查点进程)。

    1)PMON(Process Monitor)

    PMON的主要作用如下:

    • 监控各个Oracle后台进程是否正常,发现异常的进程将其清除掉,重新生成该进程;
      (说明:当用户进程断掉时,Server Process 留着就没用了,但是还占着空间,PMON 会定时检查 Server Process ,如果和 User Process 连接不上了,PMON 会把 Server Process 收回,把 PGA 空间收回,里面的锁也收回。)
    • 监控空闲会话是否到达阀值;
    • 动态注册监听。

    2)SMON(System Monitor)

    SMON的主要作用如下:

    • 当Oracle运行时突然宕机,下次启动需要实例恢复(Instance Recovery),SMON负责实例恢复的全程监控;
    • 当Oracle运行时突然宕机,在下一次启动Oracle Instance的时候,它里面一些没有释放的资源会由SMON进行清理;
    • 一些事务失败的时候也由SMON进行清理;
    • 内存空间很分散(不连续)时需要SMON将这个分散的空间整合起来;
    • 释放不再使用的临时段(Segment)。

    3)DBWR(Database Writer)

    DBWn是Oracle中工作最繁重的进程。主要作用如下:

    • 将 Database Buffer Cache 中的脏块(Dirty Buffer)写到 Data File 中;
    • 释放Data Buffer Cache空间。

    小说明:
    如果数据库的负荷比较大,来自于客户端的请求比较多,存在大量的IO操作,需要频繁的将缓冲区的内容写到磁盘文件上,那么这时就可以配置多个DBWn(Oracle一共支持20个DBWn,DBW0-DBW9,DBWa-DBWg)。通常一个中小型的Oracle只需要一个DBW0 Process就可以了。

    注意:以下几种情况发生时,都会触发DBWR Process将 Database Buffer Cache 的内容写到Data Files :

    • Checkpoint Occurs
    • Dirty Buffer reach threshold
    • There are no free Buffers
    • Timeout occurs
    • RAC ping request is made
    • Tablespace OFFLINE
    • Tablespace READ ONLY
    • Table DROP or TRUNCATE
    • Tablespace BEGIN
    • BACKUP

    小补充:
    服务器进程对数据文件执行读操作,而 DBWR 负责对数据文件执行写操作。

    在这里插入图片描述

    小问答:
    Commit 时 DBWR 有何动作?
    答:什么也不做!

    4)LGWR(LOG Writer)

    Oracle Instance中只有一个LGWR Process,这个Process的工作和DBWR Process类似。主要作用如下:

    • 将 Redo Log Buffer 中的内容写入到 Redo Log Files 中(必须在 DBWR 写脏块之前写入日志)。
      (Redo Log Buffer 是一个循环的Buffer,对应的 Redo Log Files 也是一个循环的文件组,从文件头开始写,当文件写满了,又会从文件头开始写,会把前面的内容覆盖掉,为了避免将 Redo Log Files 覆盖掉可以选择将其写入到 Archived Redo Log Files 中。)

    注意:以下几种情况发生时,都会触发LGWR Process将 Redo Log Buffer 中的内容写到 Redo Log Files :

    • At Commit
    • When one-third full
    • When there is 1 MB of redo
    • Every three seconds
    • Before DBWn writes

    怎么保证提交的事务永久保留呢?
    答:以执行update操作为例 。
    1. 当执行提交语句的时候,修改已经写到 Redo Log Buffer 里了;
    2. 当看到返回提交成功时,说明修改已经写到磁盘 Redo Logfile 里了;
    3. 所以提交成功后,改动已经同步到磁盘了,不会丢了。

    5)CKPT(Checkpoint)

    CKPT的主要作用如下:

    • 生成检查点, 通知或督促 DBWR 写脏块;
      *完全检查点:保证数据一致性。
      *增量检查点:不断更新控制文件中的检查点位置,当发生实例崩溃时,可以尽量缩短实例恢复的时间。
    • 在Data File的文件头更新检查点信息;
    • 在Control File中更新检查点的信息。

    6)ARCn(Archiver)

    • ARCn是一个可选的后台进程(几乎可看作必选进程)。
    • Oracle可以运行在两种模式下:ARCHIVELOG MODE(归档模式)、NOARCHIVELOG MODE(非归档模式)。DBA 必须做出的一个重要决策是,配置数据库在ARCHIVELOG模式下运行,还是在NOARCHIVELOG模式下运行。
    • 联机重做日志文件填满后,oracle实例开始写入下一个联机重做日志文件。从一个联机重做日志文件切换到另一个联机重做日志文件的过程称为日志切换。

    ARCn的主要作用如下:

    当Oracle运行在归档模式时

    • ARCn进程在每次进行日志切换时都会开始对已填满的日志组进行备份或归档;
    • ARCn进程会在可以重新使用日志之前自动归档重做日志文件,因此会保留对数据库所做的所有更改。这样,即使磁盘驱动器损坏,也可以将数据库恢复到故障点。

    通过上面的学习,现把图 1 更新如下:

    在这里插入图片描述

    图7 Oracle 数据库体系结构

    Database

    Database 其实就是由一堆物理文件组成的,主要是用于存储数据,Database 中主要包含三种类型的文件:Data Files、Control Files、Redo Log Files。
    另外还有Parameter File、Password File、Achieved Log Files等。

    1)Data Files(数据文件)

    • Data Files 就是用于存储数据的,Table 中的数据都是保存在 Data Files 中的。
    • 1个 Data File 对应磁盘上的 1 个物理操作系统文件。
    • Data Files 中频繁访问的数据块缓存在 Database Buffer Cache 中。
    • 新的数据块不会立刻写出到 Data Files,而是在 DBWR处于活动状态时再写出。

    2)Control Files(控制文件)

    • Oracle为了操作Data File,提供了一些 Control Files,这些 Control Files 主要是记录数据库的一些控制信息。
    • 用于维护数据库对象的状态,维护数据库的元数据(数据库自身物理结构的数据:数据库名称、数据库创建时间、所有数据文件和重做日志文件的名称及位置)。

    3)Redo Log Files(重做日志文件)

    • Redo Log Files 记录着数据库的改变,如果向数据库中放入数据或者是修改里面的数据,只要对数据库作了修改(insert,delete,update),那么就要将修改之前的状态、修改之后的状态都记录在 Redo Log Files 中,其作用就是恢复Data File。
      * 例如:数据库有一个事务需要提交,但是提交失败了,事务就要回滚,那么事务回滚的依据就来自于这个 Redo Log Files。Redo Log Files 中记录着数据库的改变,关于这个事务的改变,如果需要回滚就需要把Redo Log Files中的数据取出来,依照 Redo Log Files 中的数据把 Data Files 恢复到修改之前的状态。
      * 有 3 种状态:Active、Inactive、Current 。

    4)Parameter File(参数文件)更多内容

    • 任何一个数据库都必须要有参数文件,这个参数文件规定了Oracle中的一些基本的参数、初始化的参数的值。

    5)Archived Log Files(归档日志文件)

    • Archived Log Files 和 Redo Log Files 是相辅相成的,Redo Log Files 其实是一个反复利用的过程,会有几个(一般为3个)固定的文件,这些固定文件会被依次使用,用满了以后,Oracle就会再次写这个文件头,就把以前的东西冲掉了。为了进一步加强数据库的备份恢复能力,在覆盖之前把这些修改的信息都归档到 Archived Log Files 中。

    6)Password File(密码文件)

    • 用户客户端连接到后台数据库系统时候存储口令的。

    小问答:
    Instance 和 Database 的对应关系是怎样的呢?

    答:Instance :Database = n :1
    1个 Instance 只能属于1个数据库,可以多个 Instance 同时访问1个数据库。


    小补充:
    Oracle 的内存结构(Memory Structure)

    Oracle 的 Memory Structure 实际上包含两部分内容:SGA和PGA

    SGA(System Global Area系统全局区)

    • 一个 Oracle Instance 对应一个SGA,SGA 在Oracle Instance启动的时候被分配,SGA 是Oracle Instance 的基本组成部分。
    • 一个 Oracle Instance 仅有一个 SGA,SGA是一个非常大的内存空间,甚至可以占据物理内存的80%。

    PGA(Program Global Area程序全局区)

    • 一个 Server Process 启动的时候就会分配一个 PGA。在 Oracle Instance 中 PGA 可能会很多。例如启动10个Server Process就会有10个PGA。
    • PGA 存放用户游标、变量、控制、数据排序、存放 hash 值。
    • 与 SGA 不同,PGA 是独立的,非共享。是分配给一个进程并归该进程私有的内存区域。

    用户与 Oracle 服务器的连接方式

    专用连接模式(Dedicated Server Process)

    • 用户在客户端启动了一个应用程序,例如 sql*plus,就是在客户端启动一
      个 User Process ,与 oracle 服务器端连接成功后,会在服务器端生成一个 Server Process ,该 Server Process 作为 User Process 的代理进程,代替客户端执行各种命令并把结果返回给客户端。会话与专用服务器之间存在一对一的映射。
    • User Process 一旦中止,与之对应的Server Process立刻中止。
    • 专用连接的 PGA 的管理方式是私有的。
    • Oracle 缺省采用专用连接模式。

    共享连接模式(shared server process)

    • 多个 User Process 共享一个 Server Process。
    • 它通过调度进程(Dispatcher)与共享服务器连接,共享服务器实际上就是一种连接池机制(connectionpooling),连接池可以重用已有的超时连接,服务于其它活动会话。但容易产生锁等待。
    • 此种连接方式现在已经很少使用了。
    • 所有调度进程(Dispatcher)共享一个公共的请求队列(resquest queue),但是每个调度进程都有与自己响应的队列(Response Queue)。
    • 在共享服务器中会话是在 SGA 中的(UGA)存储信息,而不像专用连接那样在 PGA 中存储信息,这时的 PGA 的存储结构为堆栈空间。

    驻留连接池模式(Database Resident Connection Pooling,简称 DRCP)

    • 适用于必须维持数据库的永久连接。
    • 结合了专用服务器模式和共享服务器模式的特点,它提供了服务器连接池,但是放入连接池的是专用服务器。
    • 它使用连接代理(而不是专用服务器)连接客户机到数据库,优点是可以用很少的内存处理大量并发连接(11g 新特性,特别适用于 Apache 的 PHP 应用环境)。
    展开全文
  • Oracle体系结构详解.pdf

    2021-09-26 22:56:08
    Oracle体系结构详解.pdf
  • ORACLE 体系结构详解

    2010-01-07 18:19:31
    ORACLE 体系结构详解,针对ORACLE架构体系进行深入讲解,适合初学者学习
  • Oracle体系结构详解(上) 一、oracle数据库的整体架构 由上图可知,oracle数据库由实例和数据库组成。 二、数据库存储结构: 2.1数据库存储结构 Oracle数据库有物理结构和逻辑结构。数据库的物理结构是数据库...

    转自http://m.blog.chinaunix.net/uid-28255964-id-3551144.html


    Oracle体系结构详解(上)

    一、oracle数据库的整体架构

    由上图可知,oracle数据库由实例和数据库组成。

    二、数据库存储结构:

    2.1数据库存储结构

    Oracle数据库有物理结构和逻辑结构。数据库的物理结构是数据库中的操作系统文件的集合。数据库的物理结构由数据文件、控制文件和重做日志文件组成。

      数据文件:数据文件是数据的存储仓库。

      联机重做日志文件:联机重做日志文件包含对数据库所做的更改记录,在发生故障时能够恢复数据。重做日志按时间顺序存储应用于数据库的一连串的变更向量。其中仅包含重建(重做)所有已完成工作的最少限度信息。如果数据文件受损,则可以将这些变更向量应用于数据文件备份来重做工作,将它恢复到发生故障的那一刻前的状态。重做日志文件包含联机重做日志文件(对于连续的数据库操作时必须的)和归档日志文件(对于数据库操作是可选的,但对于时间点恢复是必须的)。
    查看系统的redo log的信息
    SQL> select group#,sequence#,bytes,members,status from v$log;

        GROUP#  SEQUENCE#      BYTES    MEMBERS STATUS
    ---------- ---------- ---------- ---------- ----------------
             1         22   52428800          1 INACTIVE
             2         23   52428800          1 CURRENT
             3         21   52428800          1 INACTIVE
    SQL> select member from v$logfile;
    MEMBER
    /u01/app/oracle/oradata/hnzk/redo03.log
    /u01/app/oracle/oradata/hnzk/redo02.log
    /u01/app/oracle/oradata/hnzk/redo01.log

     控制文件:控制文件包含维护和验证数据库完整性的必要的信息。控制文件虽小,但作用非常大。它包含指向数据库其余部分的指针:联机重做日志文件和数据文件的位置,以及更新的归档日志文件的位置。它还存储着维护数据库完整性所需的信息。控制文件不过数MB,却起着至关重要的作用。

    除了三个必须的文件外数据库还能有其它非必须的文件如:参数文件、口令文件及归档日志文件。

    实例参数文件:当启动oracle实例时,SGA结构会根据此参数文件的设置内置到内存,后台进程会据此启动。

    口令文件:用户通过提交用户名和口令来建立会话。Oracle根据存储在数据字典的用户定义对用户名和口令进行验证。

    归档重做日志文件:当重做日志文件满时将重做日志文件进行归档以便还原数据文件备份。
    三、实例的整体架构

    实例整体架构图:

    实例由内存和后台进程组成,它暂时存在于RAM和CPU中。当关闭运行的实例时,实例将随即消失。数据库由磁盘上的物理文件组成,不管在运行状态还是停止状态,这些文件就一直存在。因此,实例的生命周期就是其在内存中存在的时间,可以启动和停止。一旦创建数据库,数据库将永久存在。通俗的讲数据库就相当于平时安装某个程序所生成的安装目录,而实例就是运行某个程序时所需要的进程及消耗的内存。

    Oracle的内存架构包含两部分系统全局区(SGA)和程序全局区(PGA)。

    3.1程序全局区


    3.2系统全局区

    在操作系统提供的共享内存段实现的内存结构称为系统全局区(SGA)。SGA在实例启动时分配,在关闭时释放。在一定范围内,可以在实例运行时通过自动方式或响应DBA的指令,重新调整11g实例中的SGA及其中的组件的大小。


    由上图可知SGA至少包含三种数据结构:数据库缓冲区缓存、日志缓冲区及共享池。还可能包括:大池、JAVA池。可以使用show sga,查看sga的状态。

    3.1.1共享池
       共享池由许多子结构组成,这些子结构由oracle服务器内部自动管理。在共享池的总体大小范围内,各个结构的大小将因针对实例的活动模式而异。共享池本身的大小可以动态重调。
        a.库缓存是内存区域,按其已分析的格式存储最近执行的代码。分析就是将编程人员编写的代码转换为可执行的代码,这是oracle根据需要执行的一个过程。通过将代码缓存在共享池,可以在不重新分析的情况下重用,极大地提高性能。
        b.数据字典缓存有时称为“行缓存”,它存储最近使用的对象定义:表、索引、用户和其他元数据定义的描述。通过将此类定义放在SGA的内存中,以便使所有会话可以直接访问它们,而不是被迫从磁盘上的数据字典中重复读取它们,从而提高分析性能。
        c.PL/SQL区:存储的PL/SQL对象是过程、函数、打包的过程、打包的函数、对象类型定义和触发器。它们全都像源代码那样存储在数据字典中,也使用已编译的格式。当会话调用存储的PL/SQL对象时,它必须从数据字典读取。为了避免重复读取,将对象缓存到共享池的PL/SQL区。
      共享池的大小对性能产生重要影响,它应该足够大,以便缓存所有频繁执行的代码和频繁访问的对象定义,但也不能过大,以至于连仅执行一次的语句也要缓存。如果共享池过小,则性能下降,因为服务器会话将反复抢夺其中的空间来分析语句,此后,这些语句会被其他语句重写,在重新执行时,将不得不再次分析。过大的共享池也会对性能产生不良影响,因为搜索需要的时间过长。如果共享池小于最优容量,则性能将下降。但有一个最小容量,如果低于此限度,则语句将失败。确定最优容量是一个性能调整问题,大多数数据库都需要一个数百MB的共享池。有些应用程序需要1GB以上的共享池,但很少有应用程序能够在共享池小于100 MB时充分运行。
           共享池在实例启动时分配。从9i开始,可以随时将其调大或调小。可以采用手动方式重调,也可以根据工作负荷自动调整大小。
    手动调整共享池的大小:
    select COMPONENT,CURRENT_SIZE,MIN_SIZE,MAX_SIZE from v$sga_dynamic_components;//显示可以动态重设大小的SGA组件的当前、最大和最小容量
    SQL> select COMPONENT,CURRENT_SIZE,MIN_SIZE,MAX_SIZE from v$sga_dynamic_components;

    COMPONENT                                                        CURRENT_SIZE   MIN_SIZE   MAX_SIZE
    ---------------------------------------------------------------- ------------ ---------- ----------
    shared pool                                                              104857600           100663296          0
    large pool                                                                   4194304                4194304           0
    java pool                                                                    4194304                4194304           0
    streams pool                                                                    0           0          0
    DEFAULT buffer cache                                            167772160           167772160          0
    KEEP buffer cache                                                           0          0          0
    RECYCLE buffer cache                                                    0          0          0
    DEFAULT 2K buffer cache                                               0          0          0
    DEFAULT 4K buffer cache                                               0          0          0
    DEFAULT 8K buffer cache                                               0          0          0
    DEFAULT 16K buffer cache                                             0          0          0
    DEFAULT 32K buffer cache                                             0          0          0
    ASM Buffer Cache                                                            0          0          0

    13 rows selected.

    SQL> ALTER SYSTEM SET SHARED_POOL_SIZE = 110M;

    System altered.

    SQL> select COMPONENT,CURRENT_SIZE,MIN_SIZE,MAX_SIZE from v$sga_dynamic_components;

    COMPONENT                                                        CURRENT_SIZE   MIN_SIZE   MAX_SIZE
    ---------------------------------------------------------------- ------------ ---------- ----------
    shared pool                                                         117440512  100663296          0
    large pool                                                            4194304    4194304          0
    java pool                                                             4194304    4194304          0
    streams pool                                                                0          0          0
    DEFAULT buffer cache                                                155189248  155189248          0
    KEEP buffer cache                                                           0          0          0
    RECYCLE buffer cache                                                        0          0          0
    DEFAULT 2K buffer cache                                                     0          0          0
    DEFAULT 4K buffer cache                                                     0          0          0
    DEFAULT 8K buffer cache                                                     0          0          0
    DEFAULT 16K buffer cache                                                    0          0          0
    DEFAULT 32K buffer cache                                                    0          0          0
    ASM Buffer Cache                                                            0          0          0

    13 rows selected.

    3.1.2数据库缓冲区

    数据库缓冲区
         数据库缓冲区是oracle用来执行SQL的工作区域。在更新数据时,用户会话不直接更新磁盘上的数据,而是首先复制到数据库缓冲区缓存。更改应用于数据库缓冲区缓存中这些数据块的副本,块将在缓存中保留一段时间,直至其占有的缓冲区需要缓存另一块为止。在查询数据时,数据也要经过缓存。会话计算出那些块包含关键的行,并将它们复制到数据库缓冲区缓存。此后,相关行传输到会话的PGA作进一步处理。此后数据块会在数据库缓存区缓存中保留一段时间。
       理想状况下,包含频繁访问的数据的所有块将位于数据库缓冲区缓存中,从而最大程度地减少磁盘I/O的需要。如果缓冲区的缓存中存储的块的映像与磁盘上的映像不同,那么这样的缓冲区常称为“脏缓冲区”。脏缓冲区必须写回到数据文件,然后缓冲区又变得干净了。即使再写入磁盘后,此块也仍留在内存中,可能有一段时间,此缓冲区不会被另一个块所重写。
       数据库缓冲区缓存的大小会对性能产生至关重要的影响。缓存应足够大,以便能缓存所有频繁访问的块,但也不能太大,以至于它会缓存极少使用的块。如果缓存过小,那么将导致磁盘活动过多,因为频繁访问的块持续从磁盘读取,并由其他块使用和重写,然后再从磁盘读取。数据库缓冲区缓存在实例启动时分配。从数据库9i开始,可以随时将其调大或调小。可以采用手动方式重调,也可以根据工作负荷自动重调大小(如果启用了自动化机制)。(优化的时候会用到

    修改DB_CACHE_SIZE的方法

    1查看SGA大小 show parameter sga_max_size  db_cache_size的尺寸受SGA的影响为能大于SGA

    2查看show parameter shared_pool_size尺寸

    一般来说shared_pool_size+db_cache_size=SGA_MAX_SIZE*70%左右

    经过计算再修改db_cache_size

    sql>alter system set db_cache_size=大小M  scope=spfile sid='数据库SID';

    sql>shutdown immediate

    sql>startup

    sql>show parameter db_cache_size

    就可以看到修改后的效果了

    3.1.3日志缓冲区
     日志缓冲区是小型的、用于短期存储将写入到磁盘上的重做日志的变更向量的临时区域。"变更向量"是应用于某些对象的修改,执行DML语句会生成应用于数据的变更向量。有了重做日志,数据库就保证数据永不丢失,每当数据块放生变更时,都会将应用于块的变更向量写到重做日志,如果需要还原数据文件,则通过重做日志,可以将变更向量提取并应用于数据文件备份。
     会话服务器进程不将重做记录直接写入到重做日志文件,否则,每当执行DML语句时,会话将不得不等待磁盘I/O操作完成。相反,会话将重做记录写入内存中的日志缓冲区。这样做的速度将远比写入磁盘快。此后,日志缓冲区写出到重做日志文件。写操作由日志写入器后台进程(LGWR)完成。
     日志缓冲区在启动是实例时分配,如果不重新启动实例,就不能在随后调整其大小。在oracle体系结构中,将日志缓冲区转储到磁盘时基本瓶颈之一。DML的速度不能超过LGER将变更向量转储到联机重做日志文件的速度。如果重做生成是限制数据库性能的因素,唯一的选项是使用RAC,在RAC数据库中,每个实例都有自己的日志缓冲区和自己的LGWR,这是将重做数据并行写入磁盘的唯一方法。

    3.1.4大池
       大池是一个可选区域,如果创建了大池,则那些在不创建大池的情况下使用共享池内存的不同进程将自动使用大池。大池的一个主要用途是供共享的服务器进程使用。在缺少大吃的情况下,这些进程将使用共享池中的内存,将导致对共享池的恶性竞争。如果使用的是共享服务器或并行服务器,那么始终应该创建大池。设置大池的大小与性能无关,如果某个进程需要大内存池,而内存不够用,则此进程将失败并发生错误。如果分配的内存超过需要,语句的执行速度并不会因此加快。从9i第2版本开始,用户可以在启动实例后创建大池,并重设其大小。
    3.1.5 JAVA池
      只有当应用程序需要在数据库中运行java存储程序时,才需要java池。用户可以在启动实例后创建池并重设池的大小,可以完全自动地创建池,并设置池的大小

    展开全文
  • oracle体系结构详解

    2014-05-19 16:59:58
     二、instance结构详解   1、  内存结构   主要包括 sga ( system global area )和 pga ( program global area )   Pga 是当程序起来时,给 server process 用(不...

    文章转载地址:http://blog.csdn.net/yujin2010good/article/details/7709120


     Oracle体系结构就是围绕这张图展开的,要想深入了解oracle,就必须把这张图搞明白。

    如图:

     

    一、基本组成:

    Oracle server:

       一般情况下是一个instance和一个database组成

       1个instance只能对应一个数据库。
        特殊:1个数据库可以有多个instancerac

            一台服务器上同时可装多套版本的数据库软件,每个数据库软件可建多个数据库,但是每个数据库只对应一个instance,也可以理解成每个数据库只有一个SID 。
             利用DBCA建出的每个库都是相对独立的,在同一服务器上如果创建多库必须将环境变量的参数文件做区分,并且在对实例切换时需如下 操作:
                                                                             connect   用户名/密码@实例的服务名

     

     

    Oracle Instance:

    是由内存(SGA)和后台进程(backupground Process)组成

    通过instance来访问database

    一个实例只能打开一个数据库

     

    Oracle database:

    数据文件(Data files):

        数据文件永远存储数据库的数据,包括数据字典、用户数据(表、索引、簇)、undo数据等

    重做日志(Redo log):

    “先记后写”

    重做日志用于记录数据库的变化,当进行例程恢复或介质恢复时需要使用重做日志

    执行DDLDML操作时,事物变化会被写到重做日志缓冲区,而在特定的时刻LGWR会将重做日志缓冲区中的内容写入重做日志。

    控制文件(Control file

    控制文件用于记录和维护数据库的物理结构,并且每个Oracle数据库至少要包含一个控制文件。

    归档日志(Archive log:

    是非活动(Inactive)重做日志的备份。

    口令文件(Password file:

    用于验证特权用户(具有SYSDBASYSOPER权限的特殊数据库用户)

    参数文件(Parameter file):

    用于定义启动实例所需要的初始化参数,包括文本参数文件(pfile)和服务器参数文件(spfile

     

    User and Server process :

    在执行sql语句时产生的进程,每一个连接,oracle server创建一个session,产生一个server process,在client发起一个connection时就产生了一个user process

     

     

    体系结构可以分为,database结构和instance结构

    如下结构:

     

     

     二、instance结构详解

      

    1、  内存结构

     

    主要包括sgasystem global area)和pgaprogram global area

     

    Pga是当程序起来时,给server process用(不包含在instance里面,这里不做重点讨论)

     

    SGA(System Global Area)由一组内存结构组成,它是由所有用户进程共享的一块内存区域。启动例程时,Oracle自动分配SGA,关闭例程时,oracle自动释放SGA所占用的内存空间。

     

    下面是dave哥关于sga详解:

    http://blog.csdn.net/tianlesoftware/article/details/5594080

    Sga包括,share pooldb buffer cacheredo log bufferlarge pooljava pool

    9i 中我们都知道在管理Oracle中使用动态SGA时,Granule的大小是和SGA的大小有关系。

    SGA 分配的最小单元为一个granule.Oracle SGA的大小总是granule的整数倍,即分配是以整数个granule来分配的。

    9i 中的规则如下:

      linux/unix

       SGA <=128 M  granule 4M

       SGA >128M     granule 16M

      Windows

       SGA <=128 M   granule 4M

       SGA >128M     granule 8M

    10g 中的分配规则为

      linux/unix

      SGA <=1G   granule 4M

      SGA >1G    granule 16M

      Windows

      SGA <=1G   granule 4M

      SGA >1G     granule 8M

     SQL> select component, granule_size from v$sga_dynamic_components;

    COMPONENT                                                        GRANULE_SIZE

    ---------------------------------------------------------------- ------------

    shared pool                                                           4194304

    large pool                                                            4194304

    java pool                                                             4194304

    streams pool                                                          4194304

    DEFAULT buffer cache                                                  4194304

    KEEP buffer cache                                                     4194304

    RECYCLE buffer cache                                                  4194304

    DEFAULT 2K buffer cache                                               4194304

    DEFAULT 4K buffer cache                                               4194304

    DEFAULT 8K buffer cache                                               4194304

    DEFAULT 16K buffer cache                                              4194304

    DEFAULT 32K buffer cache                                              4194304

    ASM Buffer Cache                                                      4194304

     

    13 rows selected.

     

    Elapsed: 00:00:00.06

     SQL>

     SQL> desc v$sga_dynamic_components;

     Name                   Type

     --------------------------------------------------------

     COMPONENT              VARCHAR2(64)      

     CURRENT_SIZE           NUMBER

     MIN_SIZE               NUMBER

     MAX_SIZE               NUMBER

     USER_SPECIFIED_SIZE    NUMBER

     OPER_COUNT             NUMBER

     LAST_OPER_TYPE         VARCHAR2(13)

     LAST_OPER_MODE         VARCHAR2(9)

     LAST_OPER_TIME         DATE

     GRANULE_SIZE           NUMBER

     SQL>

     SQL>  select * from v$sga_dynamic_components;

    COMPONENT            CURRENT_SIZE   MIN_SIZE   MAX_SIZE USER_SPECIFIED_SIZE OPER_COUNT LAST_OPER_TYP LAST_OPER LAST_OPER GRANULE_SIZE

    -------------------- ------------ ---------- ---------- ------------------- ---------- ------------- --------- --------- ------------

    shared pool              92274688   92274688          0                   0          0 STATIC                                 4194304

    large pool                4194304    4194304          0                   0          0 STATIC                                 4194304

    java pool                 4194304    4194304          0                   0          0 STATIC                                 4194304

    streams pool                    0          0          0                   0          0 STATIC                                 4194304

    DEFAULT buffer cache     62914560   62914560          0                   0          0 INITIALIZING                           4194304

    KEEP buffer cache               0          0          0                   0          0 STATIC                                 4194304

    RECYCLE buffer cache            0          0          0                   0          0 STATIC                                 4194304

    DEFAULT 2K buffer ca            0          0          0                   0          0 STATIC                                 4194304

    DEFAULT 4K buffer ca            0          0          0                   0          0 STATIC                                 4194304

    DEFAULT 8K buffer ca            0          0          0                   0          0 STATIC                                 4194304

    DEFAULT 16K buffer c            0          0          0                   0          0 STATIC                                 4194304

    DEFAULT 32K buffer c            0          0          0                   0          0 STATIC                                 4194304

    ASM Buffer Cache                0          0          0                   0          0 STATIC                                 4194304

     

    13 rows selected.

     

     

    Buffer Cache Size    

       数据缓存,调高数据命中率可以提高性能。按数据块存放。

         db_cache_size

         db_keep_cache_size

         db_recycle_cache_size

      alter system set db_cache_size = xxx M

     SQL> show parameter advice

    NAME_COL_PLUS_SHOW_PARAM    TYPE                 VALUE_COL_PLUS_SHOW_PARAM

    --------------------------------------------------------------------------------

    db_cache_advice             string               ON

     SQL>

     SQL> select * from v$db_cache_advice;

     SQL>

    Large Pool Size        rman 和一些并行处理时候会用到。

    Java Pool Size         java存储过程的支持

     

    Streams Pool Size          

               

             

              

    Oracle 10g  sga_target自动调整只是针对这四项:data buffer cache, large_pool, shared_pool, java_pool

     

    1)       03:41:30 SQL> show sga

    2)        

    3)       Total System Global Area  285212672 bytes

    4)       Fixed Size                  1218992 bytes

    5)       Variable Size              71304784 bytes

    6)       Database Buffers          209715200 bytes

    7)       Redo Buffers                2973696 bytes

    8)       04:45:40 SQL>

    9)        

    04:46:18 SQL> select name,bytes/(1024*1024) ,resizeable from v$sgainfo;

    10)    

    11)   NAME                             BYTES/(1024*1024) RES

    12)   -------------------------------- ----------------- ---

    13)   Fixed SGA Size                          1.16252136 No

    14)   Redo Buffers                             2.8359375 No

    15)   Buffer Cache Size                              200 Yes

    16)   Shared Pool Size                                60 Yes

    17)   Large Pool Size                                  4 Yes

    18)   Java Pool Size                                   4 Yes

    19)   Streams Pool Size                                0 Yes

    20)   Granule Size                                     4 No     ;区组大小为4M

    21)   Maximum SGA Size                               272 No

    22)   Startup overhead in Shared Pool                 36 No

    23)   Free SGA Memory Available                        0

    24)    

    04:49:34 SQL> select sum(bytes)/(1024*1024) size_in_mb  from v$sgastat;

    25)    

    26)   SIZE_IN_MB

    27)   ----------

    28)   276.003071

    29)    

    30)    

    04:48:19 SQL> select * from v$sgastat;

    31)    

    32)   POOL         NAME                            BYTES

    33)   ------------ -------------------------- ----------

    34)   shared pool  KKJ WRK LAT                       300

    35)   shared pool  kfkhsh_kfdsg                     2052

    36)   shared pool  event statistics ptr arra         680

    37)   shared pool  KGKP randnum                    40000

    38)   large pool   PX msg pool                    206208

    39)   large pool   free memory                   3988096

    40)   java pool    free memory                   4194304

    41)    

    42)   602 rows selected.

    43)    

    04:50:37 SQL> show parameter sga;

    44)   

    45)   NAME                                 TYPE        VALUE

    46)   ------------------------------------ ----------- ------------------------------

    47)   lock_sga                             boolean     FALSE

    48)   pre_page_sga                         boolean     FALSE

    49)   sga_max_size                         big integer 272M

    50)   sga_target                           big integer 272M

    SGA动态尺寸总计不能超过初始化参数SGA_MAX_SIZE的值。

    如果sga_target超过了sga_max_size的大小,在Instance重新启动后,sga_max_size会调整成和sga_target一样大小的值。

    如果在初始化参数里这些内存池设置为非零,则系统启动后,这些值将作为该参数对应的最小值运行。如果那个值在系统运行时不够,则Oracle将自动为其添加容量,以帮助其优化操作,直到内存使用达到SGA_TARGET所表明的上限。

    [oracle@oraserv ~]$ !sql

    sqlplus '/as sysdba';

     

    SQL*Plus: Release 10.2.0.1.0 - Production on Sat Mar 19 11:17:30 2011

     

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.

     

    Connected to an idle instance.

     

    11:17:35 SQL> startup

    ORACLE instance started.

     

    Total System Global Area  419430400 bytes

    Fixed Size                  1219784 bytes

    Variable Size             289407800 bytes

    Database Buffers          125829120 bytes

    Redo Buffers                2973696 bytes

    Database mounted.

    Database opened.

    11:18:13 SQL> show parameter sga

     

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    lock_sga                             boolean     FALSE

    pre_page_sga                         boolean     FALSE

    sga_max_size                         big integer 400M

    sga_target                           big integer 300M

    11:18:23 SQL> alter system set sga_target=500m ;

    alter system set sga_target=500m

    *

    ERROR at line 1:

    ORA-02097: parameter cannot be modified because specified value is invalid

    ORA-00823: Specified value of sga_target greater than sga_max_size

     

     

    11:18:38 SQL> alter system set sga_target=500m  scope=spfile;

     

    System altered.

     

    11:18:54 SQL> startup force;

    ORACLE instance started.

     

    Total System Global Area  524288000 bytes

    Fixed Size                  1220360 bytes

    Variable Size             176161016 bytes

    Database Buffers          343932928 bytes

    Redo Buffers                2973696 bytes

    Database mounted.

    Database opened.

    11:19:30 SQL> show parameter sga;

     

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    lock_sga                             boolean     FALSE

    pre_page_sga                         boolean     FALSE

    sga_max_size                         big integer 500M

    sga_target                           big integer 500M

    11:19:38 SQL>

     

    利用后台进程MMAN进行SGA动态管理

    [oracle@oracle ~]$ ps -ef |grep ora_|grep ora_

    oracle    8012     1  0 11:12 ?        00:00:00 ora_mman_prod

     

     

    share pool:

    共享池(Share Pool)用于存放最近执行的SQL语句和数据字典信息。

    共享池主要有库高速缓存(Library Cache)和数据字典高速缓存(Dictionary cache)两部分组成

    1)库高速缓存(Library Cache

    库高速缓存用于存放最近执行的sql语句信息,包括sql语句文本,解析代码值及执行计划。

     假设执行一条sql语句

         -select ename,job from emp where empno=7788;

               如果最近(还没有被lru淘汰)执行过这条语句,他就会直接从cache里面读结果;如果没有执行过,就需要读数据文件,这个过程就比较复杂,效率差距很大。

    http://blog.csdn.net/yujin2010good/article/details/7235864

     

    这里还有两个概念:

    物理i/o和逻辑i/o---------11000

    物理i/o:从数据缓冲区找不到所需要的数据,就要从硬盘里面读取。

    逻辑i/o:从数据缓冲区能找到所需要的数据,

    理论上讲一个数据库性能是否良好,这个逻辑i/o应该占95%以上

     dave哥对命中率有详细的描述

    http://blog.csdn.net/tianlesoftware/article/details/4674153

     

    2)、数据字典高速缓存区(Dictionary cache

    用于存放数据字典的信息,包括表、列定义以及权限信息)

    库高速缓存和数据字典高速缓存大小是动态变化的,不是固定的。

         SQL> alter  system   set  share_pool_size=60m;

    DB buffer

         数据高速缓存(Database Buffer cache)用于存放最近访问的数据块信息,它由许多小缓冲区(缓冲区大小=数据尺寸)组成

    Db_cache_size  定义标准的高速缓存尺寸

    Db_nk_cache_size  定义非标准的高速缓存尺寸

     

    数据库高速缓存区:

    Db_cache_size Default 默认池,所有段都被默认高速缓存到默认池。(采用LRU

    Db_keep_cache_size ,确保某些数据块始终被保留到内存中

    Db_recycle_cache_size ,数据高速缓存区“回收池”

     

     

     

    Redo log buffer

       重做日志缓存区(Redo log buffer),用于记载实例的变化。执行DDLDML语句时,服务器进程首先将事物的变化记载到重做日志缓存区,然后才会修改数据高速缓存。

    重做日志缓存区由很多重做记录(Redo record)组成,并且每条重做记录记载了被修改数据块的位置以及变换后的数据

    Large pool

       

    PGA(Program Global Area)

    用于存放服务器进程的数据和控制信息,独立于SGA的一块内存区域。

         当用户连接到Oracle Server时,Oracle server会为每个服务器进程分配相应的PGA.

    SGA是所有服务器进程都可共享那个的一块内存区域,而每个服务器进程都具有私有的PGA内存空间。

     客户端在通过sql语句连接database时,必须通过实例Instance来连接和管理数据库。

    Connection:客户端进程和服务端进程建立通讯。

    Session:当用户经过Oracle server认证后开始建立会话,直到用户退出登录,会话结束

     

    2、进程结构

     用户进程

    server进程

         当客户端运行应用程序时,会启动形影的应用进程,该进程称为用户进程;

         当连接到Oracle Server 时,Oracle在服务器端会为用户进程派生一个新的进程

    后台进程

    启动实例时,Oracle不仅会分配SGA,还会启动后台进程。

    [oracle@oraserv ~]$ ps -ef |grep ora_ 
    oracle    4694     1  0 01:18 ?        00:00:01 ora_pmon_orcl

    oracle    4696     1  0 01:18 ?        00:00:00 ora_psp0_orcl

    oracle    4698     1  0 01:18 ?        00:00:00 ora_mman_orcl

    oracle    4700     1  0 01:18 ?        00:00:00 ora_dbw0_orcl

    oracle    4702     1  0 01:18 ?        00:00:00 ora_lgwr_orcl

    oracle    4704     1  0 01:18 ?        00:00:06 ora_ckpt_orcl

    oracle    4706     1  0 01:18 ?        00:00:01 ora_smon_orcl

    oracle    4708     1  0 01:18 ?        00:00:00 ora_reco_orcl

    oracle    4710     1  0 01:18 ?        00:00:02 ora_cjq0_orcl

    oracle    4712     1  0 01:18 ?        00:00:01 ora_mmon_orcl

    oracle    4714     1  0 01:18 ?        00:00:01 ora_mmnl_orcl

    oracle    4716     1  0 01:18 ?        00:00:00 ora_d000_orcl

    oracle    4718     1  0 01:18 ?        00:00:00 ora_s000_orcl

    oracle    4722     1  0 01:18 ?        00:00:00 ora_arc0_orcl

    oracle    4724     1  0 01:18 ?        00:00:00 ora_arc1_orcl

    oracle    4728     1  0 01:18 ?        00:00:00 ora_qmnc_orcl

    oracle    4741     1  0 01:18 ?        00:00:00 ora_q000_orcl

    oracle    4743     1  0 01:18 ?        00:00:00 ora_q001_orcl

    oracle    5467     1  0 03:46 ?        00:00:00 ora_j000_orcl

     

    [oracle@oraserv ~]$

    03:50:01 SQL> select paddr,name,description from v$bgprocess where paddr<>'00';

     

    PADDR    NAME  DESCRIPTION

    -------- ----- ----------------------------------------------------------------

    30E16830 PMON  process cleanup

    30E16DE4 PSP0  process spawner 0

    30E17398 MMAN  Memory Manager

    30E1794C DBW0  db writer process 0

    30E1B808 ARC0  Archival Process 0

    30E1BDBC ARC1  Archival Process 1

    30E1C370 ARC2  Archival Process 2

    30E17F00 LGWR  Redo etc.

    30E184B4 CKPT  checkpoint

    30E18A68 SMON  System Monitor Process

    30E1901C RECO  distributed recovery

    30E195D0 CJQ0  Job Queue Coordinator

    30E1C924 QMNC  AQ Coordinator

    30E19B84 MMON  Manageability Monitor Process

    30E1A138 MMNL  Manageability Monitor Process 2

     


     DBWN

    DBWR,用于将数据高速缓存的脏缓冲区数据写入到数据文件中

     

    默认情况下只有一个DBWR0进程,通过db_writer_process 可以定义最多10个DBWR进程(DBWR0-DBWR9).

    DBWR工作触发条件:

    1、 系统发出检查点(CheckPoint)

    如:alter system checkpoint local; 这是手动操作。

    2、 脏数据块达到阀值

    3、服务器进程不能找到空闲的缓冲区

    3、超时

    4、 rac ping

    3、删除或截断表(表空间的相关操作只写表空间相关的内容)

    4、表空间正常脱机(ALTER  TABLE … OFFLINE NORMAL)

    5、开始表空间备份(ALTER  TABLESAPCE ...BEGIN  BACKUP )

     

    rac ping官方解释:

            Every few seconds, the process in one instance sends messages to each instance. The message is received by PING on the target instance. The time for the round trip is measured and collected.

            rac ping是用ops时的概念了,现在已经不用这个概念了,或许没有这个概念了。

     

    Lgwr

    LGWR,用于将重做日志缓冲区所记载的全部内容写入到重做日志文件中。

    Oracle 总是“先日志后修改”(先记载变化然后修改数据);

    DBWR工作之前,LGWR首先将事务变化写入到重做日志。

    LGWR工作触发条件:

    1、提交事务(commit

    2、每隔3秒钟

    3、当重做日志信息超过1M

    4、重做日志缓冲区超过1/3

    5、在DBWR进程将脏缓冲区写入到数据文件前

    思考:

    checkpoint时会不会导致lgwr写?

     

     

    Smon

    在例程失败的情况下,SMON做以下的恢复:

    Instance recovery

            1REDO,重新应用那些被记载的重做日志,但尚未记载的数据文件的数据。因为所有被提交的事务已经记载到了重做日志,所以可以确保恢复事务数据。(前滚)

            2、打开数据库,在打开数据库时,既包含了被提交的数据,也包含了未被提交的数据(加锁)。

            3Undo,取消未提交的数据。打开数据库之后,Oracle会自动使用Undo段回退未提交的数据。(回滚)

    整合空闲空间

    临时段

     

     

    Pmon

    PMON,用于监视服务器进程的执行,并且在服务器进程失败时清除该服务器进程。

    用户例程意外终止运行时,PMON可以轮询检测该服务进程,并执行以下操作:

    1、回退用户的当前事务

    2、释放服务器进程所占用的所有表锁和行锁

    3、释放用户所占用的其他资源

     

    Checkpoint

     

    CKPT,用于发出检查点(CheckPoint),检查点会同步数据库的数据文件和控制文件、重做日志)。

     

    当发出检查点时,后台进程CKPT将检查点时刻的SCN(System Change Number)写入到控制文件、和数据文件头部,同时会促使后台进程DBWR将所有的脏缓冲区写入到数据文件中。

     

    当发出检查点是,不仅后台进程CKPTDBWR要开始工作,LGWR也会将重做日志缓冲区写入到重做日志,从而确保数据文件、控制文件、重做日志的一致性。

    CKPT工作触发条件:

    1、日志切换(包括手动:ALTER SYSTEM SWITCH LOGFILE,手动归档应该也可以)

    2、关闭实例(shutdown abort除外)

    3、手工检查点操作(alter  system  checkpoint

    4、热备

    5、当运行ALTER TABLESPACE/DATAFILE READ ONLY的时候

    6、手动设置fast_start_mttr_target

     

    检查点发生后,他会立马做出如下事件:

    1、更新数据文件头部

    2、更新控制文件

    主要是scn,用于恢复,chpt发生的频率越高,恢复的时间越短,频率高了,数据库性能可能有影响;所以设置这个参数的时候要慎重。

     

    Arcn

     

    ARCH,用于将重做日志的事务变化复制到归档日志中(用于重做日志的备份)

    SQL> show parameter archive

     

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    archive_lag_target                   integer     0

    log_archive_config                   string

    log_archive_dest                     string

    log_archive_dest_1                   string      location=/disk1/arch

    log_archive_dest_10                  string

    log_archive_dest_2                   string

    log_archive_dest_3                   string

    log_archive_dest_4                   string

    log_archive_dest_5                   string

    log_archive_dest_6                   string

    log_archive_dest_7                   string

    log_archive_dest_8                   string

    log_archive_dest_9                   string

    log_archive_dest_state_1             string      enable

    log_archive_dest_state_10            string      enable

    log_archive_dest_state_2             string      enable

    log_archive_dest_state_3             string      enable

     

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    log_archive_dest_state_4             string      enable

    log_archive_dest_state_5             string      enable

    log_archive_dest_state_6             string      enable

    log_archive_dest_state_7             string      enable

    log_archive_dest_state_8             string      enable

    log_archive_dest_state_9             string      enable

    log_archive_duplex_dest              string

    log_archive_format                   string      %s_%t_%r.log

    log_archive_local_first              boolean     TRUE

    log_archive_max_processes            integer     2

    log_archive_min_succeed_dest         integer     1

    log_archive_start                    boolean     FALSE

    log_archive_trace                    integer     0

    remote_archive_enable                string      true

    standby_archive_dest                 string      ?/dbs/arch

     

    三、 database 结构

     

    1、物理结构

    Oracle物理结构主要由:数据文件,日志文件,控制文件

    当然还有一些其他的文件:参数文件,口令文件,告紧日志文件,归档日志文件等

    具体内容后面一一总结

     

    2、逻辑结构

    1、表空间(tablespace),是数据库的逻辑组成部分。

    2、段(Segment),用于存放特定的逻辑对象(表、簇、索引等)的所有数据,它由一个或多个区组成的。

    如表段、索引段、临时段、undo段等

    3、区(extent),是Oracle进行空间分配的逻辑单元,它由相邻的数据块组成。

    4、Oracle 块,数据块,是Oracle 在数据文件上执行I/0的最小单位,其尺寸应该为OS块的整数倍

     

     

    处理sql

    服务器进程处理select语句包括解析(Parse),执行(Execute),和提取数据(Fetch)三个阶段

    处理DML语句:

    因为DML语句不会返回数据,所以处理DML语句只包括解析和执行两个阶段

     

    处理commit

     文章内容很多摘自各位网友和ocp ppt图片。

     欢迎加入qq群:
    119224876(db china联盟),233065499(db china联盟),229845401(虚拟化-云计算-物联网)


    展开全文
  • 文章目录 ...概述详细博客官方文档Oracle 体系结构详解存储结构详解(逻辑 + 物理)Oracle 存储结构内存结构详解(SGA、PGA)Oracle 内存结构进程结构详解(客户、服务器、后台)Oracle 进程结构 ..

    文章目录

    1 概述

    1. Oracle 体系结构是 Oracle '管理的核心' 之一,
       学习体系结构有助于咱了解 Oracle 程序运行的 '来龙去脉'
    
     

    2 体系结构总图

    在这里插入图片描述

    3 思维导图

    在这里插入图片描述
    扩展:

    展开全文
  • Oracle体系结构详解

    2016-12-21 11:27:04
    对于一门技术的学习,尤其是像Oracle database这种知识体系极其庞杂的技术来讲,从宏观上了解其体系结构是至关重要的。同时,个人认为,未必是专业DBA人员才需要了解其体系结构(固然对于数据库专业人员来讲,这些都...
  • ORACLE体系结构详解

    2017-12-05 13:09:05
    对于一门技术的学习,尤其是像Oracle database这种知识体系极其庞杂的技术来讲,从宏观上了解其体系结构是至关重要的。同时,个人认为,未必是专业DBA人员才需要了解其体系结构(固然对于数据库专业人员来讲,这些都...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,646
精华内容 3,058
关键字:

oracle体系结构详解