<Oracle 数据库内存结构 请读者多多指教>

Oracle的内存结构由两大部分组成:SGA(系统全局区) PGA(程序全局区)

  简介:由于后面介绍中会有服务器进程和用户进程两个概念我们提前说明这两个概念便于理解

 服务器进程:服务器进程如一个中介,完成用户的各种数据服务请求,再把数据库服务器返回的数据和结果发给用户端。在专有链接中,一个服务器进程对应一个用户进程,二者是一一对应的关系。当用户连接中断时,服务器程序退出、在共享连接中,一个服务器进程对应几个用户进程,此时服务器进程通过OPI(Oracle Program Interface)与数据库服务器通信

用户进程: 当用户使用数据库工具,如SQL*PLUS,与数据库服务器建立连接是,就启动了一个用户进程,即SQL*PLUS软件进程。

一、SGA包含几个重要的内存区: 数据库高速缓存 (Database  buffer cache)

                                                              重做日志缓存 (Redo log buffer cache)

                                                              共享池 (Shared pool)

                                                              大池 (Large pool)

                                                              Java池 (Java pool)   

内存区                                                                      目的构成构成的作用区别
共享池是共享SQL 或 PL/SQL代码 ,即把解析得到的SQL代码的结果在这里缓存,其中PL/SQL代码不仅缓存,同时共享。库高速缓存减少解析语句的时间解析sql
  数据字典高速缓存存储数据文件、表、索引、列、用户、权限信息和其他的一些数据库对象的定义数据对象信息
数据库高速缓冲区存储最近从数据文件读入的数据块信息或用户更改后需要回写数据库的数据信息:(注:没有提交给数据库的更改后的数据成为脏数据)  数据信息
重做日志高速缓冲区在做DML操作的时候数据会发生变化,这些变化的数据在写入数据库高速缓冲区前会先写入重做日志缓冲区,同时变化之前的数据也会放入重做日志高速缓存  发生变化的前后数据信息
大池在共享池中分配额外的空间用于存储用户进程和服务进程之间的会话信息,在用户进程区域UGA的大部分将在大池中分配,此外,在大规模输入、输出及备份过程中作为缓存空间   
Java池安装和使用Java程序时必须设置Java池   

 

二、PGA(进程全局区):是服务器进程专用的一块内存,它是操作系统进程专用的内存,系统中的其他进程是无法访问这块内存的。它独立与SGA,不会在SGA中出现,它是由操作系统在本地分配的。

       PGA中存储了服务器进程或单独的后台进程的数据信息和控制信息。

       PGA分配是随着服务器进程的创建而被分配内存的,进程终止而释放内存。

       (注:它不是一个共享区域,而是服务器进程专有区域

       PGA在专有服务器配置中有如下组件: 排序区(对某些的SQL语句执行结果进行排序)

                                                                             会话信息(包含本次会话的用户权限和性能统计信息)

                                                                             游标状态(标明当前会话执行的SQL语句的处理阶段)

                                                                             堆栈区 (包含其他的会话变量)

       (注:在共享服务器配置中,多个用户进程共享一个服务器进程,上述的一些内存区可能在SGA中分配。如果创建了大池,这些内存结构就存储在大池中,否则它们在共享池中。)

        PGA内存管理: 手动PGA管理 和 自动PGA管理            

 PGA内存管理                                         注意事项
          手动必须告诉Oracle 一个特定的进程需要的排序区,允许使用多少内存
          自动要求高速Oracle在系统范围内可以为PGA中的特定功能,如排序区分配多少内存

 

三、UGA(用户全局区)它表示用户的会话状态,这部分内存会话总可以访问,UGA存储在每个共享服务器都可以访问SGA中,这样任何服务器都可以使用用户会话的数据和其他信息。而在专有服务器模式下,用户会话状态不需要共享,用户进程与服务器进程是一一对应的关系,所以UGA总是在SGA中分配。

                                                                       

四、获取内存缓冲区的信息

         查看SGA中内存的分配情况(在sqlplus中执行)

SQL>show sga;       

       Total System Global Area  5380220536 bytes
        Fixed Size                              738936 bytes
        Variable Size                        4294967296 bytes
        Database Buffers                1073741824 bytes
        Redo Buffers                        10772480 bytes

上述输出可以看到,SGA、Database Buffers 和 Redo Buffers的尺寸,至于Fxied Size 和 Variable Size我们也来说明下

Fixed Size 相关的内存区:在固定SGA中,存储一组指向SGA中其他组件的变量。它的大小因平台不同而有差异,用户无法控制,但通常固定SGA区很小。Oracle 使用这个内存区来寻找其他SGA区,可以理解为数据库的自举区。

Variable Size相关的内存区:该内存区包括共享池、Java池和大池,其中Variable Size的尺寸要高于三个之和,因为Total SGA中除去的db_cache_size部分也包括在Variable Size中

 

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值