oracle的内存结构由SGA和PGA一系列的后台进程组成。
内存结构将在oracle instance加载的时候完成加载。
sys@ORALOCAL> startup
ORACLE例程已经启动。
Total System Global Area 129571660 bytes
Fixed Size 453452 bytes
Variable Size 75497472 bytes
Database Buffers 50331648 bytes
Redo Buffers 3289088 bytes
数据库装载完毕。
数据库已经打开。
SGA(System Global Area):内存可有多个用户共享,sga的多个内存结构是动态的,但是其最大值有SGA_MAX_SIZE决定,SGA的大小不能超过这个数值(注:根据Thomas Kytes的《Oracle9i&10g编程艺术(Expert oracle database architecture)》SGA实际分配到的大小还是能够超过SGA_MAX_SIZE的值,SGA_MAX_SIZE只是一个建议值)。
Granule:粒度。SGA的最小单位,SGA有连续的granule组成。Granules的大小有SGA_MAX_SIZE决定,如果SGA小于128M,granule为4M,否则granule为16M。
下面,我用一个图来简单的展示SGA的组成,这个图基本上展示了sga的各个内存模块,但是仅仅是展示了sga,没有涉及到sga与其他的相关内容,如redolog buffer满后,向redog写内容;db buffer cache 按照LRU算法向datafile的blok写内容