Oracle-Oracle 11G体系结构(实例与数据库)

本文详细介绍了Oracle11G的体系结构,包括数据库实例、数据文件、控制文件、重做日志文件等。重点讲解了系统全局区(SGA)的组件如共享池、数据缓冲区、日志缓冲区,以及PGA的构成。还讨论了Oracle的用户进程、服务器进程和后台进程,如SMON、PMON、DBWR和LGWR等。此外,文章提到了连接模式,如专用连接和共享连接,并介绍了PGA的管理方式。
摘要由CSDN通过智能技术生成

本文介绍Oracle 11G体系结构的实例与数据库部分,数据库为Oracle 11G版本。

1 Oracle 基础架构及应用环境

Oracle体系结构示意图

1.1 Oracle Server的基本结构

1)oracle server:database + instance
2)database:data file、control file、redolog file
3)instance: an instance access a database
4)oracle memory: sga + pga
5)instance:sga + backgroud process

1.2 系统全局区SGA

1)在一个instance只有一个sga
2)sga为所有session共享,随着instance启动而分配
3)instance down ,sga被释放

2 SGA的基本组件

2.1 shared pool

共享池是对SQL、PL/SQL程序进行语法分析、编译、执行的内存区域。
共享池由库缓存(library cache),和数据字典缓存(data dictionary cache)以及结果缓存(result cache)等组成。
共享池的大小直接影响数据库的性能。
关于shared pool中的几个概念:

  • 1)library cache:sql和plsql的解析场所,存放着所有编译过的sql语句代码,以备所有用户共享

  • 2)data dictionary cache:存放重要的数据字典信息,以备数数据库使用

  • 3)server result cache:存放服务器端的SQL结果集及PL/SQL函数返回值

  • 4)User Global Area (UGA):共享服务器连接模式下如果没有配置large pool,则UGA属于SGA的shared pool, 专用连接模式时UGA属于PGA

2.2 database buffer cache

用于存储从磁盘数据文件中读入的数据,为所有用户共享。
服务器进程(server process)负责将数据文件的数据从磁盘读入到数据缓冲区中,当后续的请求需要这些数据时如果在内存中找到,则不需要再从磁盘读取。
数据缓冲区中被修改的数据块(脏块)由后台进程DBWR将其写入磁盘。
数据缓冲区的大小对数据库的读取速度有直接的影响。
要弄明白Database Buffer Cache中的几个cache概念:
在这里插入图片描述

  • Buffer pool=(default pool)+(nodefault pool)
    1)default pool(参数db_cache_size)是标准块存放的内存空间大小,SGA自动管理时此参数不用设置。使用LRU算法清理空间
    2)nodefault pool:对应的参数有如下三个:
    db_nk_cache_size 指定非标准块大小内存空间,比如2k、4k、16k、32k。
    db_keep_cache_size 存放经常访问的小表或索引等。
    db_recycle_cache_size 与keep相反,存放偶尔做全表扫描的大表的数据。

2.3 redo log buffer

日志条目(redo entries)记录了数据库的所有修改信息(包括DML和DDL),目的是为数据库恢复,日志条目首先产生于日志缓冲区,日志缓冲区较小,一般缺省值在3M-15M之间,它是以字节为单位的。
日志缓冲区的大小启动后就是固定不变的,如要调整只能通过修改参数文件后重新启动生效。不能动态修改!不能由SGA自动管理!

2.4 large pool(可选)

为了进行大的后台进程操作而分配的内存空间,主要用于共享服务器的session memory(UGA),RMAN备份恢复以及并行查询等操作。有助于降低shared pool碎片。

2.5 java pool(可选)

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

2.6 stream pool(可选)

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

3 Oracle的进程

3.1 user process:

客户端的process,访问数据库分为三种形式,sql*plus, 应用程序,web方式(EM)

  • 1)sql*plus可以执行sql和plsql请求,是典型的客户端进程。

linux作为客户端:可以使用ps看到sqlplus关键字:
$ ps -ef |grep sqlplus
windows作为客户端:可以通过查看任务管理器看到sqlplus用户进程:
C:\Documents and Settings\prod>sqlplus sys/system@ as sysdba

  • 2)应用程序

例如:通过java程序直接嵌套sql语句,或调用Oracle存储过程。

  • 3)web方式

例如:使用OEM登录、管理数据库。
$emctl start dbconsole

3.2 server process

服务器端的进程,user process不能直接访问Oracle,必须通过相应的server process访问实例,进而访问数据库。
[oracle@prod ~]$ ps -ef |grep LOCAL
在linux下看到的server process, (LOCAL=YES)是本地连接,(LOCAL=NO)是远程连接。
可以在oracle查看V$process视图,它包括了当前所有的后台进程和服务器进程。

SQL> select pid,program,background from v$process;

background字段为1是background process,其余都是server process

3.3 background process

基本的后台进程有

  • 1)smon:系统监控进程

当实例崩溃之后,Oracle会自动恢复实例。②释放不再使用的临时段。

  • 2)pmon:进程监控

当user process失败时,清理出现故障的进程。 释放所有当前挂起的锁定。释放服务器端使用的资源
监控空闲会话是否到达阈值
动态注册监听

  • 3)dbwn: 数据写入进程
    在这里插入图片描述

1、将变更的数据缓冲区的脏buffer写入数据文件中。
2、释放数据缓冲区空间。
3、触发条件:ckpt发生,脏块太多时(阈值),db_buffer自由空间不够时,3秒,表空间read only/offline/backup模式等
以上5个状况之一发生时,dbwn都会被触发

  • 4)lgwr:写日志条目
    在这里插入图片描述

1、将日志缓冲区中的日志条目写入日志文件。
2、不像DBWR可以有多个进程并行工作,LGWR只有一个工作进程
3、触发条件:commit,三分之一满(或1M满),先于dbwr写(先记后写,必须在dbwr写脏块之前写入日志,保证未提交数据都能回滚),3秒(因为有③,则由DBWR的3秒传导而来)
以上4个状况之一发生时, lgwr都会记日志

  • 5)ckpt:生成检查点
    在这里插入图片描述

作用:通知或督促dbwr写脏块
1、完全检查点:保证数据库的一致性。
2、增量检查点:不断更新控制文件中的检查点位置,当发生实例崩溃时,可以尽量缩短实例恢复的时间。
3、局部检查点:特定的操作下,针对某个表空间的

  • 6)arcn:归档当前日志

归档模式下,发生日志切换时,把当前日志组中的内容写入归档日志,作为备份历史日志提供数据库的recovery、

4 PGA的基本组件

  • 1)程序全局区(Program Global Area)的作用

缓存来自服务器进程和后台进程的数据和控制信息。
提供排序、hash连接
不提供session之间的共享,
PGA在进程创建时被分配,进程终止时被释放。所有进程的PGA之和构成了PGA的大小。
PGA的管理是比较复杂的,10g后,Oracle推荐使用PGA自动管理,屏蔽了PGA的复杂性。

  • 2)PGA的结构:
    在这里插入图片描述

1,SQL工作区(SQL Work Area): 有几个子区 1、Sort Area, 2、Hash Area 3、Bitmap Merge Area
作用:排序操作(order by/group by/distinct/union等),多表hash连接,位图连接,创建位图

2,会话空间(Session Memory)
作用:存放logon信息等会话相关的控制信息,

3,私有SQL区域(Private SQL Area)
作用:存储server process执行SQL所需要的私有数据和控制结构,如绑定变量,它包括固定区域和运行时区域

4,游标区域(Cursor Area):PLSQL游标使用的就是这块区域

5 连接方式

在这里插入图片描述

  • 1)专用连接模式(dedicated)

对于客户端的每个user process,服务器端都会出现一个server process,会话与专用服务器之间存在一对一的映射(一根绳上的两个蚂蚱)。
专用连接的PGA的管理方式是私有的。Oracle缺省采用专用连接模式。
在这里插入图片描述

  • 2)共享连接模式(shared)
    在这里插入图片描述

多个user process共享一个server process。
1,共享服务器实际上就是一种连接池机制(connectionpooling),连接池可以重用已有的超时连接,服务于其它活动会话。但容易产生锁等待。此种连接方式现在已经很少见了(具体配置方法见第十五章Oracle 网络)。
2,所有调度进程(dispatcher)共享一个公共的请求队列(resquest queue),但是每个调度进程都有与自己响应的队列(response queue)。
3,在共享服务器中会话的(UGA)存储信息是在SGA中的,而不像专用连接那样在PGA中存储信息,这时的PGA的存储结构为堆栈空间。

  • 3)驻留连接池模式(database resident connection pooling,简称DRCP):

适用于必须维持数据库的永久连接。结合了专用服务器模式和共享服务器模式的特点。它使用连接代理(而不是专用服务器)连接客户机到数据库,优点是可以用很少的内存处理大量并发连接(11g新特性,特别适用于Apache的PHP应用环境)。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值