oracle内存结构
实例instance:启动的数据库,运行在内存中的数据库,是内存中数据库的映射,管理数据库正常运行
在os中以oracle_sid标识,在db中以instance_name标识;
组成(System global area + background process);
查看实例名:
host set | grep ORACLE_SID
show parameter instance name;
数据库
show parameter db_name;
实例所存取的一个数据库文件的集合
在db中以db_name标识
组成: (初参文件,控制文件,数据文件,日志文件等)
show parameter spfile;这是参数文件
select * from v$controlfile;这是控制文件
select file_name,tablespace_name from dba_data_files;这是数据文件
select * from v$log;这是日志文件
数据库服务器
ibm特别稳定
包括存储,磁盘设备,等
实例与数据库的关系:
*一个实例对应一个数据库
单点数据库:单个实例存取一组数据库文件(通常情况)
*多个实例对应一个数据库
多点数据库:多个实例存取一组数据库文件,(OPS&RAC)
SGA(System Global Area)
SGA是一组包含着一个oracle实例的数据和控制信息的共享内存结构
是为oracle系统分配的共享内存;
是实例的主要组成部分;
是影响数据库性能的最重要因素;
随实例的启动关闭而被分配和回收
SGA自动对所包含的各种缓存自动进行动态管理
SGA主要包含6类缓存:
db_buffer_cache 数据高速缓冲
shared_pool 共享池
large_pool 大池
java_pool java池
streams_pool 流池
redo_log_buffer 重写日志缓冲(不参与动态管理)
show sga;
可以看到很多缓存信息
也可以通过select * from v$sga;查看sga这个动态表也是可以查看的
查看sga重要参数:
show parameter sga;
可以看到有
lock_sga运行过程中是否也将全部sga区都绑定到物理内存中,而不使用交换空间(linux、win平台不适用)
show parameter lock_sga;
alter system set pre_page_sga=true scope=spfile;重启生效
然后会发现数据库起不来了
pre_page_sga 启动时是否将全部sga区都绑定到物理内存中,而不使用交换分区
=============
//scope=spfile就是说设置这个参数重启生效,而且永久生效
alter system set pre_page_sga=true scope=spfile(非动态生效)
shutdown immediate;重启生效
startup open;
show parameter pre_page_sga;查看生效
//=============
sga_max_size sga区总大小的上限
//===
alter system set sga_max_size=552M scope=spfile(非动态生效)
shutdown immediate; 重启生效
startup open;
show parameter sga_max_size;查看生效
#sysctl -a|grep shmmax规定了最大大小为512M
而sga_max_size可以超越这个值,sga_max_size可以改大,改小受sga_target的限制
sga内存按照颗粒度大小granule_size分配内存,若手工分配内存大小非整数倍于granule_size,则自动凑为granule_size的整数倍大小,常见granule_size如下:
若sga<1G, granule_size=4M
若sga>1G,granule_size=8M(for win), granule_size=16M(for Other)
select bytes from v$sgainfo where name='Granule Size'
查询sga颗粒度大小
sga_target(10g新参)
启动自动共享内存管理ASMM(Automatic Shared Memory Management)机制,由mman(Memory Manager)后台进程来动态管理SGA中的各项缓存(redo_log_buffer为非动态管理),若值为0表示为启动ASMM,其值应尽量接近sga_max_size,当sga_target小于sga_max_size时,sga中各缓存合计值为以sga_target为实际上限。。
show parameter db_cache_size;
show parameter shared_pool_size;
show parameter java_pool_size;
show parameter large_pool_size;
调整sga_target前,应先查看四项缓冲的默认设置值,默认为0,表示可由ASMM在0到sga_target值所规定的区间内任意自动调整各缓冲大小,若某项缓冲设置不为0而为一具体值,代表ASMM在动态调整各缓冲区时,该缓冲区不能分配到低于该指定值的大小。
//scope=both修改后就生效,而且永久生效
//alter system set sga_target=0;关闭我们的动态管理机制