《深入解析Oracle》学习笔记(7)---Oracle体系结构之软件结构

来源:互联网 发布:网络教育考试考号查询 编辑:程序博客网 时间:2024/06/05 09:22

[声明:本文是学习著名ORACLE DBA盖国强先生的大作《深入解析ORACLE--DBA 入门 进阶与诊断案例》的学习笔记与心得体会。在此声明,文中摘录了书中部分内容,非是出于抄袭目的,而是有感于盖国强先生所写确实经典。在此声明对原作者的尊重与敬佩。]

                                                 

                                                第五章 Oracle内存管理 

Oracle内存管理是建立在对Oracle内存结构的精通基础上的,下面是我对Oracle内存结构的理解,简述如下,欢迎指正。

 

Oracle软件结构由内存结构和进程结构组成。
  Oracle数据库的软件结构就是“Oracle实例”,在启动Oracle数据库时,Oracle首先要在内存中获取、划分、保留各种用途的区域-----内存结构;运行各种后台进程-----进程结构。
  这就是一个实例。该实例负责挂载、打开数据库,之后由这个实例访问和控制数据库的各种物理结构、执行SQL语句、调整数据库性能。
  实例是用户与数据库之间的一个中间层。
  一.内存结构:包括SGA和PGA,另外还包括软件代码区。
   1.SGA(System Global Area-系统全局区):Oracle的心脏。每个实例只有一个SGA。所有的用户进程、所有的服务器进程可以共享同一个SGA,是用户与服务器通信的中心。
    主要由数据高速缓存、重做日志高速缓存、共享池组成。SGA在实例启动时创建,实例关闭时释放。
    SGA包括:
    固定区域(Fixed Area)、共享池(Shared Pool)、数据高速缓存区(Buffer Cache)、重做日志缓存区(Redo Log Buffer)、java池(java pool)、大池(large pool)、流池(stream pool)。
   2.PGA(Program Global Area-程序全局区):PGA在用户进程连接到数据库并创建一个对应的会话时,由Oracle为服务器进程分配的专门用于当前用户会话的内存区。这个内存区时非共享的、不可写的,
    只有服务器进程本身才能访问对应的PGA。PGA大小由操作系统决定、PGA内容由专业服务器模式还是共享服务器模式决定。
    会话终止时,PGA被自动释放。
    主要由排序区、会话区、游标状态区、堆栈区组成。
    .排序区
        在专用服务器模式下,PGA中才存在排序区,在共享服务器模式下,排序区和私有SQL区是在SGA中。
        由参数SORT_AREA_SIZE决定,而另一个相关的初始化参数SORT_AREA_RETAINED_SIZE的值则决定了在排序结束后,排序区保留的内存大小,这部分内存并不归还给操作系统,而是随时待命下一次排序。
        若排序区空间不够,会启用临时表空间的临时段来暂存中间排序结果,待所有排序结束后,再将整合后的排序结果从临时表空间的临时段中取出。因此,要针对业务合理设置SORT_AREA_SIZE参数值,
        避免排序区与临时表空间之间的数据交换,使排序工作在内存中完成。
    .会话区
      存储会话所具有的权限、角色、性能统计信息。
    .游标状态区
      存储了会话中,当前使用的各个游标的状态。
    .堆栈区
      存储会话中的绑定变量、会话变量、SQL语句运行时的内存结构等信息。
     
   二.进程结构:包括用户进程和服务器进程。
   1. 用户进程
     当用户在客户端启动一个Oracle数据库的应用程序时,就会在客户端创建一个Oracle的用户进程,以便执行相应的任务。
     与用户进程相关的两个概念是连接和会话。
     .连接:
      用户登录到Oracle服务器,Oracle在服务器上产生一个服务器进程,该服务器进程代表运行在客户端的用户进程与服务器通信。用户进程与服务器进程之间就是一个连接。
     .会话:
      建立连接后,就自动创建一个会话,但若该会话使用完毕后,直接更换用户,那么旧的会话将被新的会话替换,但仍然在原来的连接上。除非断开连接后者网络中断。
   2. Oracle进程
     包括服务器进程和后台进程。
     2.1 服务器进程:
      是给客户端的用户进程提供服务的,用户进程必须通过服务器进程才能访问数据库。服务器进程分为专用服务器进程(只为一个用户进程提供服务)和共享服务器进程(可以为多个用户进程提供服务)。
      在专用服务器模式下:客户端的用户进程和服务器端的服务器进程一一对应,Oracle会为每个连接启动一个服务器进程,用户进程必须将请求发给服务器进程才能访问数据库,服务器进程执行具体的命令后返回结果给用户进程。
      因为这个连接用于专门处理该客户端的所有请求,所以直到用户主动断开连接或网络出现中断该服务器进程才会停止。专用服务器进程所需要的资源全部在PGA中分配。
      在共享服务器模式下:Oracle会在服务器端启动一定数量的服务器进程,多个客户端用户进程请求共享同一个Oracle服务器服务进程,一个服务器的进程响应多个用户连接,
      共享连接在实例一启动,就分配指定数量的服务器进程,所有用户的连接,以排队的方式,由分配器指定给服务器进程,其它的进程排队等待,只要用户的请求执行完毕,服务器进程就会马上断开连接,分配器会把空闲的服务器进程分配给其它排除的进程。
     采用共享连接可以有效的提高服务器资源的利用率,但是对一个分配器,只支持一种协议,每个分配器有自已的排队队列,在请求的任务完成后,由分配器将操作结果返回给相应的用户进程。但是共享连接的建立, 需要Oracle的监听进程、分配器、共享服务器进程才能共同完成一个连接的创建,所以连接的分配也需要一定的时间和资源。
      服务器进程主要完成如下任务:
      .解析并执行用户提交的SQL语句。
      .搜索SGA的数据库缓存,如果数据不在SGA的数据库缓存中,则将其从数据文件中读入。
      .将结果返回给用户。
     2.2 后台进程:
      主要完成如下任务:
      .在内存和外存之间进行I/O操作。
      .监视各个进程的状态。
      .协调各个进程的任务。
      .维护系统的性能。
      .保证系统的可靠性。
      后台进程包括:DBWn(DataBase Writer,数据库写进程),LGWR(Log Writer,日志写进程),CKPT(ChecKPoint,检查点进程),SMON(System MONitor,系统监视进程),
      PMON(Processor Monitor,进程监视进程),ARCn(Archive,归档进程),Dnnn(Dispatcher,调度进程),RECO(RECOverer,恢复进程),LCKn(LoCK,锁进程)。
     
     根据两种连接的创建方法和管理方法,一般来说:
     对于长事务或大事务,使用专用连接,可以有效的提高系统的性能,减少用户等待和事务的排队,提高系统的利用率,如OLTP,BI等。
     对于超短事务和短事务、小事务,使用共享连接方式,可以在资源与效率之间达到一种平衡,比如网站,信息管理系统等。 

原创粉丝点击