本篇从内存结构角度来说明oracle的组成。
一个oracle server 由一个oracle实例和一个oracle数据库组成。
即oracle server = oracle Instance + Oracle Database
Oracle 实例
包括内存结构(SGA)和一系列后台进程(background process),两者合起来称为一个oracle实例。
Oracleinstance = sga+ background Process
Oracle 内存结构
包含系统全局区(SGA)和程序全局区(PGA)
即oracle memory Structures = SGA +PGA
SGA由服务器和后台进程共享
PGA包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA相反,PGA是只被一个进程使用的区域,PGA在创建进程时分配在终止进程时回收。由服务器进程产生。
下图给出oracle体系结构中主要的组件,本文接下来将对instance中的组件进行介绍:
1 SGA
SGA 是一块巨大的共享内存区域,被看做是oracle数据库的一个大缓冲池,这里的数据可以被oracle的各个进程共用。
SGA = 数据缓冲区 +重做日志缓冲区 +共享池 + 大池 + java 池 +池流
系统全局区是动态的,由参数 SGA_MAX_SIZE决定
查看当前系统的SGA大小: show parameter sga_max_size;
修改: alter system set sga_max_sieze=1200m scope=spfile;
因为实例内存分配是在数据库启动时进行的,所以要重启数据库让修改生效。
ASMM,自动内存管理,oracle会自动的对共享池、java池、大池、数据缓冲区、池流进行自动调配。
1.1 共享池(shared pool)
共享池是SGA中最关键的内存片段,特别是在性能和可伸缩性上。
太小的共享池会扼杀性能,太