============================================================
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 是包含实例的数据和控制信息的内存区,共享内存;
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;
-SHARED_POOL 缓存可在用户间共享的各个结构(SQL语句、PL/SQL 过程和数据字典信息等)
-DATABASE BUFFER CACHE 缓存从数据库检索的数据块 Data is read into blocks by Server process and Write into datafile by DBWn
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)
非脏块列表采用了一种接触计数( touch count ,也称使用计数)算法,如果命中缓存中的一个块,则会增加与之相 关联的计数器(X$BH 表显示了块缓冲区缓存中块的有关信息)
频繁使用的块会被缓存,不常使用的块不会缓存太久
从 Oracle9i 开始,同一个数据库中可以有多个不同的数据库块大小,每个不同的块大小都必须有其自己的缓冲区缓存。默认池、保持池和回收池只缓存具有默认大小的块。为了在数据库中使用非默认的块大小,需要配置一个缓冲区池来保存这些块。
使用多个块大小的目的是为了支持可传输 的表空间,也就是可以把格式化的数据文件从一个数据库传输或附加到 另一个数据库
配置非默认块大小的几种方法:
-REDO LOG BUFFER 高速缓存重做信息(用于实例恢复)
LOG_BUFFER parameter
LGWR 会在以下某个情况发生时启动对这个区的flush
-LARGE POOL(Optional) 为某些大型进程(如备份恢复操作、I/O 服务器进程)提供大量内存分配(共享服务器连接使用大池作为会话内存)
-JAVA POOL 用于 Java 虚拟机(JVM) 中特定会话的所有Java 代码和数据
-STREAM POOL 由 Oracle Streams 使用
"空" 池 ("Null" pool ):这个池其实没有名字。这是块缓冲区(缓存的数据库块)、重 做日志缓冲区和 “ 固定 SGA ” 区专用的内存。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21162451/viewspace-719583/ ,如需转载,请注明出处,否则将追究法律责任。