SGA的基本组件:
1.shared pool
共享池是对sql,datafile元数据进行分析、编译以及加入执行计划的内存区域。
共享池由缓存池(librar pool) 数据字典池(data dictionary cache)和缓存结果集(resul cache)组成。
一:library cache:sql和plsql的解析,存放sql语句代码
例如在执行一条sql(select * from abc;)时,首先通过语法分析,进行语义检查,通过解析,得到一个执行计划。最后把这个执行计划缓存在library cache中,等待下次一个sql(select * from tbc;)请求发起时,不需要通过物理读进行查询。
二:data dictionary cache :存放数据字典信息
例如在执行select * form abc;这个sql时,首先会在语法解析和library cache中寻找是否存在abc这个表,如果没有,那么会进行物理读取,在磁盘中寻找adc这个表信息。这个读取过程中,会把物理读取的adc表存在在数据字典data dictionary cache这个池中。供其他用户和session使用。
三:server result cache:缓存结果集
例如在执行select * form abc;这个表时,执行计划对存在library cache中,但作为查询的结果集,会缓存在result cache这个池中。
2.database buffer cache
用于存储从磁盘文件中读取的数据共享到内存database buffer cache中,为所以用户和session共享。当后续的请求相同时,则无需进行物理读取,直接在内存中读取即可。
注意:在database buffer cache中,缺省池和非缺省池的概念需要掌握
一:缺省池,default pool
二:非缺省池,nodefault pool
其中 default pool是标准块的内存空间大小,由sga自动管理。空间清理时受LRU算法进行空间清理。
nodefault pool 一般由 Npool keep和recy组成。
db_nk_cache_size 指定非标准块大小内存空间,比如2k、4k、16k、32k。
db_keep_cache_size 存放经常访问的小表或索引等。
db_recycle_cache_size 与keep相反,存放偶尔做全表扫描的大表的数据。
①如何指定使用某个表调入nodefault pool
SQL> alter table scott.emp1 storage(buffer_pool keep);
SQL>
select segment_name,buffer_pool from dba_segments where segment_name='EMP1';
②default pool对应的参数是db_cache_size与标准块default block是配套的,如果default block是8k, db_cache_size这个参数将代替db_8k_cache_size。
③如果要建立非标准块的表空间,先前要设定db buffer中的与之对应的db_nk_cache_size参数。
第一步,先指定db buffer里的16k cache空间大小。
SQL> alter system set db_16k_cache_size=8m;
第二步,建立非标准块表空间
SQL> create tablespace tbs_16k datafile '/u01/oradata/prod/tbs16k01.dbf' size 10m blocksize 16k;
SQL> select TABLESPACE_NAME,block_size from dba_tablespaces;
3.redo log buffer:以日志条目(redo entries)方式记录了数据库的所有修改信息(包括DML和DDL),目的是为数据库恢复,日志条目首先产生于日志缓冲区,日志缓冲区较小,一般缺省值在3M-15M之间,它是以字节为单位的。
主要作用是为了数据库的恢复,一般会把dml和ddl语法的修改信息进行记录。
日志缓冲区的大小启动后就是固定不变的,如要调整只能通过修改参数文件后重新启动生效。不能动态修改!不能由SGA自动管理!
4.larg pool 大池 (可选)
一:主要作用于共享服务器的共享连接UGA
二:rman备份恢复
三:降低并行查询的shared碎片
5.java pool (可选)
主要作用是为java虚机分配内存空间,其中包含了java指定的代码和数据
6.steam pool 流池 (可选)
为了stream process而分配的内存空间。stream技术是为了在不同数据库之间共享数据,因此,它只对使用了stream数据库特性的系统是重要的。