我的oracle 9i学习日志 3 (下载).doc
文本预览下载声明
Oracle内存结构(01)--实例、数据库与SGA
1.实例与数据库
实例(Instance):
数据库启动后在内存中的映像,管理数据库正常运行;
在OS中以ORACLE_SID标识,在DB中以Instance_name标识;
组成:(System Global Area + Background Process);
查看实例名:
$ set | grep -i oracle_sid
SQL show parameter instance_name
数据库(Database):
实例所存取的一个数据库文件的集合;
在DB中以db_name标识;
组成:(初始化参数文件,控制文件,数据文件,日志文件等)
查看数据库名:
SQL show parameter db_name;
?
2.SGA(System Global Area)
SGA是一组包含着一个Oracle实例的数据库和控制信息的共享内存结构。
是为oracle系统分配的共享内存;
是实例的主要组成部分;
是影响数据库性能的重要因素;
随实例的启动/关闭而被分配/回收;
SGA自动对所包含的各种缓冲自动进行动态管理;
SGA主要包含6类缓存:
db_buffer_cache
shared_pool
large_pool
java_pool
redo_log_buffer
streams_pool
查看SGA:
SQL show sga;
SQL select * from v$sga;
SGA相关参数:
pre_page_sga:启动时是否将全部SGA都绑定到物理内存,而不使用交换分区。
lock_sga:运行过程中是否也将全部SGA都绑定到物理内存,而不使用交换分区。
sga_max_size:SGA总大小上限值。
sga_target:启用自动共享内存管理ASMM(Automatic Shared Memory Management),指定分配给db_buffer_cache、shared_pool、java_pool、large_pool这四项内存大小之和。
注意:sga_max_size可以改大,改小则受sga_target的限制。另外,sga_target应尽量接近sga_max_size。当sga_target小于sga_max_size时,上述指定的四项动态缓存合计值以sga_target为实际上限。如果sga_target被修改为大于sga_max_size的值或sga_max_size小于sga_target时,则数据库在下次启动时sga_max_size值会自动调整为与sga_target值相等。
调整sga_target前,应先查看四项缓存默认值是否都0,若为0表示可由ASSM在0到sga_target值所规定的区间内自动调整各缓存区大小。
查看:
SQL show parameter db_cache_size;
SQL show parameter shared_pool_size;
SQL show parameter large_pool_size;
SQL show parameter java_pool_size;
更改:
SQL alter system set db_cache_size=0 scope=both/memory/spfile;
若某项缓存区大小默认设置不为0,而为某一具体值,代表ASMM在动态调整各缓存区时,该缓冲区不能分配低于该指定值的大小。
SGA内存按照颗粒度大小granule_size分配内存,若手工分配内存大小非整数倍于granule_size,则自动凑为granule_size的整数倍大小,常见granule_size如下:
若SGA1G,granule_size=4M;若SGA1G,granule_size=8M(for WIN)或16M(for Other);redo_log_buffer以512K为粒度分配内存。
查看SGA粒度大小:
SQL select bytes from v$sgainfo where name=Granule Size;
相关操作:
SQL show sga
Total System Global Area? 201326592 bytes Fixed Size????????????????? 1218532 bytes???? Variable Size?????????????bytes? Database Buffers????????? 113246208 bytes Redo Buffers??????????????? 2973696 bytes
Fixed Size:固定值,包括一些开销等其他空间
显示全部