2.2.2.2 块缓冲区高速缓存(Database Buffer Cache)
这些缓冲是对应所有数据文件中的一些被使用到的数据块。让他们能够在内存中进行
操作。在这个级别里没有系统文件,,户数据文件,临时数据文件,回滚段文件之分。也就
是任何文件的数据块都有可能被缓冲。数据库的任何修改都在该缓冲里完成,并由 DBWR
进程将修改后的数据写入磁盘。
这个缓冲区的块基本上在两个不同的列表中管理。一个是块的“脏”表(Dirty List),需要
用数据库块的书写器(DBWR)来写入,另外一个是不脏的块的列表(LRU List),一般的情况
下,是使用最近最少使用(Least Recently Used,LRU)算法来管理。
块 缓 冲 区 高 速 缓 存 又 可 以 细 分 为 以 下 三 个 部 分 ( Default pool,Keep pool,Recycle
pool)。如果不是人为设置初始化参数 (Init.ora),ORACLE 将默认为 Default pool。
由于操作系统寻址能力的限制,不通过特殊设置,在 32 位的系统上,块缓冲区高速缓
存最大可以达到 1.7G,在 64 位系统上,块缓冲区高速缓存最大可以达到 10G。
2.2.2.3 重做日志缓冲区(Redo log buffer)
重做日志文件的缓冲区,对数据库的任何修改都按顺序被记录在该缓冲,然后由
LGWR 进程将它写入磁盘。这些修改信息可能是 DML 语句,如(Insert,Update,Delete),或
DDL 语句,如(Create,Alter,Drop 等)。
重做日志缓冲区的存在是因为内存到内存的操作比较内存到硬盘的速度快很多,所以
重作日志缓冲区可以加快数据库的操作速度,但是考虑的数据库的一致性与可恢复性,数
据在重做日志缓冲区中的滞留时间不会很长。所以重作日志缓冲区一般都很小,大于 3M
之后的重作日志缓冲区已经没有太大的实际意义。
2.2.2.4 Java 程序缓冲区(Java Pool)
Java 的程序区,Oracle 8I 以后,Oracle 在内核中加入了对 Java 的支持。该程序缓冲区
就是为 Java 程序保留的。如果不用 Java 程序没有必要改变该缓冲区的默认大小。
2.2.2.5 大池(Large Pool)
大池的得名不是因为大,而是因为它用来分配大块的内存,处理比共享池更大的内存,
在 8.0 开始引入。
下面对象使用大池:
1、 MTS——在 SGA 的 Large Pool 中分配 UGA
2、 语句的并行查询(Parallel Executeion of Statements)——允许进程间消息缓冲区的分
配,用来协调并行查询服务器
3、 备份(Backup)——用于 RMAN 磁盘 I/O 缓存