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如下:
若SGA<1G,granule_size=4M;若SGA>1G,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 83888156 bytes
Database Buffers 113246208 bytes
Redo Buffers 2973696 bytes
Fixed Size 1218532 bytes
Variable Size 83888156 bytes
Database Buffers 113246208 bytes
Redo Buffers 2973696 bytes
- Fixed Size:固定值,包括一些开销等其他空间大小。是shared pool内dictionary cache的一部分与其他部分附加内存信息(如数据库和实例的状态信息)会被实例的后台进程所访问,在实例启动后即被固定在SGA中,是SGA中固定组件(在编译oracle数据库本身时就固定在其中),大小不变,故该部分缓存又称为固定SGA(Fixed SGA)。
- Variable Size:可用大小。为sga_max_size-log_buffer-db_buffer_cache-fixed_size,剩下的包含Library cache、Java pool、Large pool、cursor area、control file content等缓存区大小。
- Database Buffers:db_buffer_cache实际大小。
- Redo Buffers:redo_buffer实际大小。
SQL> select current_size from v$buffer_pool; #查看data_buffer_cache实际大小(单位M)。
SQL> select pool,sum(bytes) from v$sgastat group by pool; #查看java pool, streams pool,shared pool,large pool实际大小。
SQL> alter system set sga_target=120M scope=both; #修改sga_target自动管理缓冲区合计值,在sga_max_size范围内调整可动态生效。各缓存区大小也将自动调整以适应修改后的sga_target总值。
SQL> show parameter sga_targe;
SQL> select current_size from v$buffer_pool;
SQL> select pool,sum(bytes) from v$sgastat group by pool; #查看修改,可见已跟随sga_target而变化,注意sga的值是granule的整数倍。
SQL> alter system set sga_target=400M scope=both;
alter system set sga_target=400M scope=both
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-00823: Specified value of sga_target greater than sga_max_size
alter system set sga_target=400M scope=both
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-00823: Specified value of sga_target greater than sga_max_size
#若修改sga_target值大于sga_max_size,则sga_target只能作为静态参数修改:SQL> alter system set sga_target=400M scope=spfile;
SQL> alter system set sga_max_size=200M scope=spfile; #修改sga_max_size值,静态参数,重启生效。
SQL> alter system set large_pool_size=10M scope=memory; #修改制定缓冲区最小值。若想在ASMM管理下,为某缓存区规定一个最小分配下限值(指示ASMM该区的分配不能低于该指定值),则可通过设定默认值来达到目的。
SQL> select pool,sum(bytes) from v$sgastat group by pool; #查看,可见修改已生效。
未完,待续。。。
本文转自 d185740815 51CTO博客,原文链接:http://blog.51cto.com/luotaoyang/463476,如需转载请自行联系原作者