ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle Database基础学习笔记 之 Oracle体系结构 之系统全局区

Oracle Database基础学习笔记 之 Oracle体系结构 之系统全局区

原创 Linux操作系统 作者:wlot378 时间:2012-03-26 21:36:59 0 删除 编辑

============================================================
Oracle Database基础学习笔记 之 Oracle体系结构
之系统全局区

资料:《Oracle 9i & 10g编程艺术-第4章 内存结构》
                                     --by 王磊/菜小小~ @ 2011/4/26 18:12
                                     --by 王磊/菜小小~ 最后温习更新@ 2012/3/26 21:35
============================================================

数据库结构之内存结构:

  • SGA: System Global Area Structure SGA 是包含实例的数据和控制信息的内存区,共享内存;
  • PGAProgram Globle Area Structure 程序全局区 (PGA) 是包含各个服务器进程的数据及控制信息的内存区,操作系统进程或线程专用的内存,其他进程/线程不能访问;
  • UGA:User Global Area用户全局区(UGA):存储用户会话信息。


SGA: System Global Area Structure SGA 是包含实例的数据和控制信息的内存区,共享内存;

SGA_MAX_SIZE parameter

SGA_TARGET parameter

1 instance - 1 SGA

查看sga组件大小

ops$tkyte@ORA10G> compute sum of bytes on pool

ops$tkyte@ORA10G> break on pool skip 1

ops$tkyte@ORA10G> select pool, name, bytes

 from v$sgastat

 order by pool, name;

  • >>show sga
  • >>select * from v$sgastat
  • >>select * from v$sga
  • >>select component, granule_size from v$sga_dynamic_components;
  • >>select component, current_size/1024/1024||'M', min_size/1024/1024||'M', user_specified_size from v$sga_dynamic_components;
  • >>select * from v$sga_dynamic_free_memory;
  • 各个池的内存以一种称为颗粒( granule))的单位来分配。颗粒是最小的分配单位,通过查询 V$SGA_DYNAMIC_ COMPONENTS,可以查看各个 池所用的颗粒大小


-SHARED_POOL 缓存可在用户间共享的各个结构(SQL语句、PL/SQL 过程和数据字典信息等)

  • SHARED_POOL_SIZE parameter
  • Library cache
  • shared SQL area
  • shared PL/SQL area
  • DD buffer


-DATABASE BUFFER CACHE 缓存从数据库检索的数据块 Data is read into blocks by Server process and Write into datafile by DBWn

  • DB_CACHE_SIZE parameter
  • DB_BLOCK_SIZE parameter
  • DB_BLOCK_BUFFERS parameter
  • DB_CACHE_ADVISE parameter

1.2.2 DB CACHE的分配和DBWR的相关算法 http://www.oraclefans.cn/forum/showblog.jsp?rootid=35439

 DB CACHE是以BLOCK为单位组织的缓冲区,不同的BLOCK SIZE的数据块需要不同的BLOCK SIZE的DB CACHE;

前台进程只负责将数据块从文件中读取到DB CACHE中,而DB CACHE中的脏数据是由DBWn进程来负责写入数据文件

一般情况下,DB cache命中率越高,访问性能越好;

数据库刚刚启动时,DB CACHE中几乎没有用户数据的缓冲(除非在系统级触发器中做了事先加载);

定位DB CACHE中的数据块是通过HASH算法;Oracle为DB CACHE设计了一个HASH链结构,将整个DB CACHE中的正在使用的数据块都放置到HASH链上,这个HASH链是一个由多个BUCKET组成的多链结构,每个BUCKET就是一条链的链头,从链头引出一条独立的双向链。Oracle 通过数据文件的文件号+数据块的块号,进行一个HASH运算,得到的HASH值就是这个数据块所在的BUCKET的号码。如果要查找某个数据块,通过HASH算法,算出这个数据块所位于的链的链头的BUCKEET的位置,就可以很快的找到链头,从链头的双向链表结构扫描下去,就可以找到相关的数据块。

DB CACHE中有多种类型的LIST,归结为2类,LRU LIST和HASH LIST,LRU LIST的目的是对DB CACHE根据LRU算法进行BUFFER的分配和AGE OUT的管理,HASH LIST的目的是为了加快对DB CACHE的访问(一个是为了分配和AGE OUT,一个是为了BUFFER GET)

  • 保持池( keep pool ) DB_KEEP_CACHE_SIZE parameter 一般存放访问相当频繁的段;
  • 回收池( recycle pool )DB_RECYCLE_CACHE_SIZE parameter一般存放访问很随机的大段;
  • 状态:已连接;干净(CR & 同步);空闲或未使用;脏;

非脏块列表采用了一种接触计数( touch count ,也称使用计数)算法,如果命中缓存中的一个块,则会增加与之相 关联的计数器(X$BH 表显示了块缓冲区缓存中块的有关信息)

频繁使用的块会被缓存,不常使用的块不会缓存太久

从 Oracle9i 开始,同一个数据库中可以有多个不同的数据库块大小,每个不同的块大小都必须有其自己的缓冲区缓存。默认池、保持池和回收池只缓存具有默认大小的块。为了在数据库中使用非默认的块大小,需要配置一个缓冲区池来保存这些块。

使用多个块大小的目的是为了支持可传输 的表空间,也就是可以把格式化的数据文件从一个数据库传输或附加到 另一个数据库

配置非默认块大小的几种方法:

  • 1、设置 DB_nK_CACHE_SIZE 参数,并重启数据库
  • 2、缩小另外的某个 SGA组件,从而在现有的 SGA 中腾出空间来建立一个 nKB 的缓存
  • 3、如果 SGA_MAX_SIZE 参数大于当前的SGA 大小,可直接分配一个  nKB 的缓存。


-REDO LOG BUFFER 高速缓存重做信息(用于实例恢复)

LOG_BUFFER parameter

  • 重做缓冲区的默认大小由 LOG_BUFFER 参数控制,取值为 512 KB 和 (128 * CPU 个数 )KB 中的较大者

LGWR 会在以下某个情况发生时启动对这个区的flush

  • When the redo log buffer is one-thired full;重做缓冲区 1/3 满,或者包含了 1 MB 的缓存重做日志数据
  • When timeout occurs;每 3 秒一次
  • Where there is 1MB of redo;
  • Before DBWn writes modified blocks in datafile buffer cache to the datafiles;
  • When transaction commits;无论何时有人提交请求
  • 因此如果重做缓冲区的大小超过几 MB ,通常意义不大,对于有大量并发事物的大型系统有意义。


-LARGE POOL(Optional) 为某些大型进程(如备份恢复操作、I/O 服务器进程)提供大量内存分配(共享服务器连接使用大池作为会话内存)

  • LARGE_POOL_SIZE parameter

-JAVA POOL 用于 Java 虚拟机(JVM) 中特定会话的所有Java 代码和数据 

  • JAVA_POOL_SIZE parameter

-STREAM POOL 由 Oracle Streams 使用

  • STREAMS_POOL_SIZE  parameter

"空" 池 ("Null" pool ):这个池其实没有名字。这是块缓冲区(缓存的数据库块)、重 做日志缓冲区和  固定 SGA  区专用的内存。

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

请登录后发表评论 登录
全部评论

注册时间:2010-06-07

  • 博文量
    30
  • 访问量
    203930