SQL> show sga

Total System Global Area 105978600 bytes
Fixed Size 453352 bytes
Variable Size 50331648 bytes
Database Buffers 54525952 bytes
Redo Buffers 667648 bytes
SQL>


Fixed Size:


oracle 的不同平台和不同版本下可能不一样,但对于确定环境是一个固定的值,里面存储了SGA 各部分组件的信息,可以看作引导建立SGA的区域。

 

Variable Size:


包含了shared_pool_size、java_pool_size、large_pool_size 等内存设置

 

Database Buffers:


指数据缓冲区,在8i 中包含db_block_buffer*db_block_size、buffer_pool_keep、buffer_pool_recycle 三部分内存。在9i 中包含db_cache_size、db_keep_cache_size、db_recycle_cache_size、 db_nk_cache_size。

 

Redo Buffers:


指日志缓冲区,log_buffer。在这里要额外说明一点的是,对于v$parameter、v$sgastat、v$sga查询值可能不一样。v$parameter 里面的值,是指用户在初始化参数文件里面设置的值,v$sgastat是oracle 实际分配的日志缓冲区大小(因为缓冲区的分配值实际上是离散的,也不是以block 为最小单位进行分配的),v$sga 里面查询的值,是在oracle 分配了日志缓冲区后,为了保护日志缓冲区,设置了一些保护页,通常我们会发现保护页大小是8k(不同环境可能不一样) .

=========================================================

 

关于show sga结果的描述 
 

Total System Global Area AAAAA bytes

Fixed Size BBBBB bytes

Variable Size CCCCC bytes

Database Buffers DDDDD bytes

Redo Buffers EEEEE bytes

 

fixes size : oracle 的不同平台和不同版本下可能不一样,但对于确定环境是一个固定的值,里面存储了 SGA 各部分 组件 的信息,可以看作 引导 建立 SGA 的区域

Variable Size : 包括 shared pool ,java pool ,large pool, 管理DB_BLOCK_BUFFERS 的内存,管理控制文件信息的内存,等等其他管理和控制 oracle 内部结构的内存

redo buffer

1: 设置参数

SQL> show parameters log_buffer

NAME TYPE VALUE

------------------------------------ ------- ------------------------------

log_buffer integer 524288

 

2:日志内存大小

SQL> select * from v$sgastat where name like '%log%';

POOL NAME BYTES

----------- -------------------------- ----------

log_buffer 656384

 

 

3 : 为了保护日志内存,而增加了辅助的内存,也就是保护页

SQL> show sga

Total System Global Area 496049552 bytes

Fixed Size 454032 bytes

Variable Size 109051904 bytes

Database Buffers 385875968 bytes

Redo Buffers 667648 bytes

SQL>

对于数据库来说,在不同 的平台下

log_buffer 是离散的 一组值,假设是集合 R,并且不是按照 os blockck 或者 db block 为步长增加的,(比如可能是 65k,128k,512k ,641k....这样的值) 当设置参数为某个值的时候,数据库选择的实际大小是 大于等于 该值 的 min(R) ,根据这组值,比如你设置了 log_buffer = 600k ,则实际选择的是641 k

然后,在实际分配内存的时候,为了 给 log buffer 做一些保护,还另外分配了一小部分空间,通常是 11 k 大小。

则有641+11 = 652 k

这才是 最后真正的 内存大小 ,也就是 show SGA 时候显示大小。