oracle 体系结构简介

1.1、SGA(system global area)

SGA是oracle Instance的基本组成部分,在示例启动是分配。是一组包含一个oracle实例的数据和控制信息的共享内存结构。主要用于存储数据库信息的内存区,该信息为数据库进程所共享。

1.1.1、共享池(shared pool)

1)data dictionary cache(缓存的是数据字典信息)

2)library cache

  a)编译后的sql语句,当有新的语句来了之后,就从这里找,如果有的话,就直接执行了。

  b)也涉及到命中率的问题

  c)优化:以绑定变量方式,将where 过滤条件不同而其他相同的语句进行变量绑定,降低硬解析。

3)共享模式的情况下,PGA在共享池中。

4)每一个会话分配一个UGA,UGA在共享池中分配,如果是共享模式,那么久在Large pool中。

1.1.2、数据高速缓存区(database buffer cache)

1)命中率的概念

读内存的时候,如果在DB buffer cache中的话,那么就从内存中返回,如果没有的话,那么久从数据库中读到内存中。从内存中返回的比率越高说明命中率也高,性能相对也会较好。命中率较低的优化:加大内存,也可以将开辟一个keep缓存区,将经常访问的数据放到keep内存中。

1.1.3、重做日志缓存区(redo log buffer)

触发redo log buffer的写入规则

1)三秒钟

2)无论何时,只要有提交

3)三分之一满或者缓存了1M的重做日志数据

4)切换日志或检查点事件

1.2、PGA(program global Areas)

  此区域包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA正相反,PGA是只被一个进程使用的私有区域,PGA在创建进程时分配,在终止进程时回收。专用模式下每一个服务器进程分配使用一个PGA。

1.3、内存结构

1)用户进程(user process)

  》是一个需要与oracle server交互的程序

  》运行于客户端

  》当用户运行于某个工具或应用程序时创建,当用户退出上述程序时结束。

  》用户向oracle server 发出调用,但它并不与oracle server 直接交互,而是用过server process与oracle server进行交互。

2)服务进程(server process)

  》是一个直接与oracle server交互的程序

  》与oracle server运行于同一台机器上

  》使用PGA执行user process发出的调用,并向user process返回结果状态和结果信息。

3)后台进程(background)

  后台进程用于维护物理存储于内存中的数据之间的关系。主要包括:

    

     》SMON:系统监视进程,进程负责在实例启动时恢复实例,包括清除临时段以及恢复因系统崩溃而中断的事务。

    a)实例恢复

    b)重做已提交的事务

    c)打开数据库

    d)回滚未提交的事务

    e)合并数据文件中相邻的*空间

    f)释放临时段的空间

    

    》PMON:进程监视进程,进程负责监视数据库的处理情况,并负责清除掉死掉的进程。PMON还负责重启失败的调度进程。

    a)回滚用户的当前事务。

    b)释放相关的锁。

    c)释放其他相关的资源。

 

    》DBWn:数据库写入进程,进程负责将脏数据(已经修改但是没有提交的数据)从数据缓存区写回磁盘。当一个事务修改数据块中的数据以后,不需要立即将数据块写回磁盘。由于oracle所采用的先进机制,修改后的数据可以不用立即回写,并且出现故障也不会丢失。因此DBWR可以采取更有效的写回方式,而不用在事务提交完之后立即写回。DBWR通常定时写回数据,除非数据缓冲区需要清空或已满。

  数据写回时,采用了最近最少使用原则。对于支持异步io的系统,只需要一个DBWR进程即可,对不支持异步io的可以通过增加DBWR的个数来提升效率。

  触发DBWR进程的情况:

    #发生检查点

    #达到脏缓冲区阈值

    #超时

    #将表空间设置为脱机或只读

    #删除或截断表

    #备份表空间

  》CKPT:检查点进程,CKPT进程负责向DBWR进程发送信号,要求执行一次检查点,并更新数据库的所有数据和控制文件为一直检查点。

  SKPT会检查控制文件的SCN和数据文件的SCN是否一直,如果不一致,它会触发DBWR保证数据库的一致性。checkpoint(检查点),是指由DBWR进程将所有修改过的数据缓冲区里的脏数据写回数据文件。CKPT是可选的,如果没有CKPT进程,则有LGWR进程代行这些任务。

    a)是DBWR将SGA中所有被修改的数据库缓冲区的内容写入磁盘,无论事务是否被提交

    b)用检查点信息更新数据文件头

    c)用检查点信息更新控制文件

  它可以保证

    d)将经常被修改的数据写入磁盘

    e)简化实例恢复

    》LGWR进程:日志写入进程LGWR负责将日志缓冲区中的数据写入重做日志。由于COMMIT操作依赖于LGWR写回日志(commit操作触发LGWR将日志缓冲区数据写入redo日志),因此系统性能容易受到LGWR的影响。

    LGWR的执行要早于DBWR

    触发条件:    

    a)事务提交

    b)三分之一的redo日志缓冲区已满

    c)每三秒钟

    d)在DBWR写磁盘之前

   

     》ARCH进程:归档日志进程,ARCH进程负责将在线重做日志复制到归档存储器,保障redo log文件的完整性。

以上是对oracle体系结构中的一些常用的进程与内存区做一个基础的描述,如果想深入去了解oracle体系结构原因,还是需要找一些详细全面的文档来研究。

上一篇:编写利用Fragment创建新闻列表


下一篇:hdu 1402 FFT(模板)