sga | |||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||
SGA的管理 | ■有三种方式: ●8i:SGA的总大小由所有内存组件大小之和决定,不能直接定义SCA大小。对内部组件大小的修改必须在数据库重起 后 才能生为,所以叫做SGA的静态管理。 ●9i: SGA总大小由初始化参数SGA_ MAX SIZE确定,各个内存组件大小之和不能超过这个参数。在这个大小之下, SGA 各个内存组件可以在不重起数据库的情况下直接修改大小,所以叫做SGA的动态管理。 ●10g: SGA大小既可以像9i一样动态管理,也可以实施SGA的自动管理,只需要设置初始化参数SGA_ TARGET, SGA 各个内存组件 三就可以由数据库自动设置大小,设置的依据来源于系统自动收集的统计信息
■在9i以后,SGA的内部组件大小可以动态调整,也可以由数据库自动管理,在设置内存大小的时候,分配的基本单位是粒 度(granule)。Granule是一段连续的虚拟内存,大小取决于SGA _MAX SIZE的大小 ●如果SGA_ MAX _SIZE小于128M, Granule为4M, 否则Granule为16M ●各个内存组件分配大小必须是Granule的整倍数 ●整个SGA最小不小于3个Granule大小 ■9i中的规则如下: ●linux/unix SGA >128M granule 16M ●Windows SGA >128M granule 8M ■10g中的分配规则为 ● linuxunix ●Windows | ||||||||||||||||||||||||||||||
shared pool | ■用于存储: ◆最近执行的SQL 语句 ◆最近使用的数据定义 ◆库缓存 | ||||||||||||||||||||||||||||||
库缓存 | ■存储最近使用的SQL和PL/SQL语句的信息 ■共享最常用的语句 ■管理上遵循LRU规则 ■包括两个部分: ◆共享PLSQL区 | ||||||||||||||||||||||||||||||
数据字典缓存 | ■存储在数据库中最近使用的定义 ■包括数据文件,表,索引,列,用户,权限和其他的数据库对象 ■在分析阶段,服务器进程查找数据字典去验证对象的名字以及是否是合法访问 ■对于查询和DML语句,如果数据字典的信息在缓存中能够提高响应时间大小由Shared Pool的大小决定 | ||||||||||||||||||||||||||||||
SGA中关键的内存片段。特别是性能与扩展上。 ■如果以前执行过,则按照以前执行的计划执行,通常是软分析[soft parse|或快速软分析 ◆通过PCA提交Sql语句>parse语句>soft parse->执行语句- >通过PCA输出 ■如果没执行过,oracle 开始分析语句的语法,语义,按照优化器规则获得最佳执行计划,并在内存中保存这个语句与之对应 的执行计划等相关信息,便于下次快速调用。 ◆通过PGA提交Sql语句parse语句hard parse→分析与得到优化方案[CBOor RB0|→根据优化方案制定执行计划》执行语句 ◆一-通过PGA输出 | |||||||||||||||||||||||||||||||
数据高速缓存区 | ■暂存从数据文件中获得的数据块的数据映像 ■同样遵循LRU算法管理内存 ◆DB RECYCLE CACHE SIZE ■只有defualt池可以被sga自动管理
| ||||||||||||||||||||||||||||||
重做日志缓冲区 | ■暂存数据库中所有数据块的改变 ■内存管理方法是FIFO ■重做日志被用于提供数据恢复功能 ■暂存重做日志的目的是为了提高语句的执行速度 ■大小由参数LOG_ BUFFER决定,但这个内存区不能动态调整大小 | ||||||||||||||||||||||||||||||
大池 | ■大池是系统全局区中可选的一个内存区 | ||||||||||||||||||||||||||||||
java池 | ■是系统全局区中一个可选内存区。 ■用于Java程序的解析 和执行 | ||||||||||||||||||||||||||||||