ITPub博客

首页 > 数据库 > Oracle > oracle基础学习之oracle体系结构

oracle基础学习之oracle体系结构

原创 Oracle 作者:sst_db 时间:2017-03-06 15:02:15 0 删除 编辑


ORACLE名词解析

实例:oracle 后台进程 以及在服务器中分配的内存区域

数据库:  基于磁盘的数据文件,日志文件,控制文件和归档日志文件组成的物理文件集合.

数据库服务器:   管理数据库的各种软件.

 一个数据库可以被多个实例装载和打开.但一个实例只能装载一个数据库.

 脏数据:db buffer  cache 中没有保存到数据文件和内存中不一样的数据。(已经被修改)

PGA和SGA

SGA:system  global  area,系统全局区,多个用户进程共享的内存区域。sga中的资源可以被多个用户进程共同使用。由图可SGA包括,数据库缓冲区缓存(db buffer  cache),重做日志缓冲区缓存(redo  log  cache)

共享池(share  pool),java池(java pool),大型池(large  pool)等。


Db  buffer  cache :`数据库缓冲区缓存,用于存放oracle系统最近访问的数据块。用户发起请求以后若缓冲区有用户请求数据,将会直接被系统返回,若缓冲区没有相关数据,系统将先把数据从数据文件读到缓冲区中,之后再从缓冲区返回给用户;由于sga被所有用户共享,所以某一用户发起请求将数据装载在缓冲区后,其他用户再次发起该请求时将直接从缓冲区返回数据。缓存区大小有限,经常被访问的数据块将放置在缓冲区前端,偶尔访问的数据块将会被放置缓冲区后端,若缓冲区被填满,则会挤掉缓冲区后端的数据块。


Db  buffer cache  也分为三个部分 。脏数据区、空闲区以及保留区。

   脏数据区:存放着已经被修改等待保存到数据文件的的是数据。脏数据等待commit命令发出后通过dbwr将其写入到数据文件中。

 空闲区:不包含任何数据块,oracle可以从数据文件中读取数据保存到这里。

 保留区:存放着块正在访问的数据块和明确保留以后也会使用的数据块。



Redo  log cache:重做日志缓冲区缓存,用于存放对于数据库进行修改操作产生的日志信息,日志信息在写入重做日志文件之前,首先会放到重做日志缓冲区。等到缓冲去信息量达到峰值或者检查点发生之后,由lgwr(日志写进程)写入重做日志文件(减少i/o读写次数,提高性能)。重做日志缓冲区大小由logbuffer参数指定,可以动态修改,对数据库性能影响较小。



Share pool:共享池,sga保留的内存区域。用户缓存sql语句pl/sql语句,数据字典,资源锁,字符集和其他控制结构。Share pool  主要分为  库缓存(library  cache)和数据字典缓存(dictionary  cache)。

库缓存主要包含私有sql区和共享sql 区。库缓存主要存放最经使用过的  sql。pl/sql,语句的文本和执行计划。当下次执行相同的语句时 ,不需要解析语句而直接缓冲区找到相应的执行计划提高效率 。

被缓存的sql或pl/sql语句被分为两部分分别存放在共享sql区和私有sql区,共享sql区主要存放语句的语法分析结果和执行计划,若以后执行类似语句可利用共享sql缓冲区中已缓存的语法分析和执行计划,私有sql区则存放着sql语句中的绑定变量,环境和会话信息。这些信息为执行该语句的用户私有,其他用户不可使用此信息。

数据字典缓存(dictionary  cache)用于存放oracle系统内部管理需要的数据字典信息。


Large pool:大型池,大型池不是必须的内存结构,只是在一些特殊情况下实例需要大型池来缓解共享池的访问压力。常见一下几种情况需要用的

1.使用恢复管理器进行恢复和备份操作,大型池将作为i/o缓存区使用。

2.执行具有大量排序工作的的生气了语句

3.使用并行查询,大型池作为并行查询进程交换信息的地方。

4.使用i/o  slave仿真异步i/o功能时,作为i/o缓存区使用。


Java pool:java池用于提供内存空间给java虚拟机使用。

流池:用于在数据库之间进行数据共享,如果没有用到oracle流,不需要用。


PGA:program global area:程序全局区,他的内存在进程私有区中,oracle的每个服务器进程都有自己属于自己的那部分pga资源,通常PGA有私有sql区和会话区。


私有sql区用于存储变量以及sql运行时的的内存结构信息,每个用户连接到实例时候都会创建一个会话,这个会话在sga中创建一个共享sql区,但在pga中会创建多个私有sql区,把私有sql区与对应的共享sql区对应,就可以获得一条sql语句的完整缓存数据。

每个会话的 私有sql区可以分为静态区和动态区,静态区的信息在会话过程中保持不变,只有当会话结束,静态区才会被释放.。
动态区的信息在会话过程中是不断变化的,一旦sql语句指定完毕,及时会话没有结束,也会被释放掉。

会话区:会话区用于存放用户的会话信息。

    后台进程
后台进程是一组运行于oracle服务器端的后台程序,是oracle实例的重要组成部分,其中smon,pmon,dbwr,lgwr,ckpt这5个后台进程必须正常启动。

DBWR:数据库写进程。数据库写进程的主要任务是将内存中的脏数据块写到数据文件中。但是为了减少i/o操作,提高oracle服务器性能,dbwr并不是随时将所有的脏数据块写数据文件,只有在以下几种情况下dbwr会把脏数据块写入到数据文件中。

1.用户执行插入或修改操作是,要将新数据写入到高速缓冲区,如果高速缓冲区没有找到足够大的空闲数据块来存放新数据,oracle将启动dbwr把脏数据块写到数据文件上,从而获得空闲数据块来存放新数据。


2.检查点(ckpt)启动之后,会强制要求dbwr将脏数据写入数据文件中。

3.脏数据块在缓冲区中存放超过3s,dbwr进程会自启将脏数据块写入到数据文件中。

注:在比较繁忙的应用系统中,可以修改spfile中的db_werter_processes 参数来使用多个dbwr进程,但进程的数量不应超过当前系统处理器数量。


LGWR:日志写进程,用于将重做日志缓冲区的数据写入到日志文件中。oracle会先将用户所做修改的日志信息先写入日志文件,再把修改的结果写入到日志文件。

 oracle实例在运行中将会产生大量的日志信息,这些信息首先会被记录到sga中的重做日志缓冲区中,当发生提交命令或者重做日志缓冲区的信息满1/3。或者日志存放信息超过3s之后,lgwr进程会将日志信息从重做日志缓冲区中取出并写入到日志文件组中序号较小的文件中。


ARCH:归档进程,只有当数据库处于归档模式时该进程才能起作用,归档模式下,当各个日志文件组都被写满即将覆盖之前,先由归档日志进程把即将覆盖的日志文件中的日志信息读出。然后再把这些信息写入到归档日志文件中。


SMON:系统监视进程是在数据库启动时执行恢复性工作的强制性进程。

 PMON;进程监控进程用于监视其他进程的状态,当有进程启动失败的时,PMON会清除失败的用户进程,释放用户进程所用的资源。





来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31440056/viewspace-2134785/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2017-03-02

  • 博文量
    1
  • 访问量
    1021