一个oracle实例就一个SGA,PGA则不同,每一个后台进程,都有一个PGA。
1. SGA的组成部分:
- shared pool(共享池)
- database buffer cache(数据块缓存区)
- redo log buffer
- other structures(such as lock and latch management,statistical data)
SGA中除此之外还有两个可选项:large pool和java pool;随着版本的不同会有所不同,核心内容不变。
2. SGA的一些特性:
- SGA是动态的,9i版本之前是固定不变的,也就是说oracle启动之后,SGA的大小就不能调整了;
-
参数 SGA_MAX_SIZE决定SGA的最大值;
-
granules 是SGA分配内存的基本单位 查看granules 的语句(select component,granule_size from v$sga_dynamic_components);
3. shared pool(共享池)
(1)主要用来存储:
- 最近执行的sql语句
- 最近使用的数据定义
(2)包含两块共享内存,这两部分内存事关数据库的性能:
- library cache
- data dictionary cache
(3)共享池可以使用参数SHARED_POOL_SIZE更改大小,用法:alter system set shared_pool_size=64M;
(4)library cache (共享池的组成部分)
library cache存储经过编译解析后的最近使用的sql和plsql语句,因此主要包括两部分:shared sql area和shared plsql area(当然也包括别的,这里说的是主要部分)。library cache的大小将影响oracle的性能,它的大小由共享池决定。
(5)data dictionary cache(数据字典也是共享池的组成部分)
存储着数据库控制信息的信息,包括数据文件的信息、表的信息、索引、用户、权限信息以及其他的数据库对象信息;数据字典使用非常频繁。它的大小也是由共享池决定的。
4. database buffer cache
这块内存结构是最大的也是最重要的,主要是用来存储真正的数据文件(以block的形式进行存储);它的目的就是提供性能(通过提高命中率);参数DB_BLOCK_SIZE决定块的大小;
动态的改变cache大小的参数是DB_CACHE_SIZE(alter system set DB_CACHE_SIZE=96M);
5. redo log buffer
主要用于恢复的;存储着所有数据块的改变信息;
每对数据做一次改变,在redo log就会有相应的一条记录,称为redo entries ,一条redo entries 就可以恢复一次对数据库的改变;redo log buffer的大小由参数LOG_BUFFER决定。
6. large pool(可选项)
7. java pool(可选项)