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类缓存:
  1. db_buffer_cache
  2. shared_pool
  3. large_pool
  4. java_pool
  5. redo_log_buffer
  6. 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:固定值,包括一些开销等其他空间大小。是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
#若修改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,如需转载请自行联系原作者
目录
相关文章
|
14天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(一):装上去,飞起来!
【Oracle】玩转Oracle数据库(一):装上去,飞起来!
56 7
|
1月前
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(3)
Oracle数据库基本概念理解(3)
18 2
|
14天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(七):RMAN恢复管理器
【Oracle】玩转Oracle数据库(七):RMAN恢复管理器
41 5
|
1月前
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(2)
Oracle数据库基本概念理解(2)
13 1
|
2天前
|
关系型数据库 MySQL 数据库
一台MySQL数据库启动多个实例
一台MySQL数据库启动多个实例
|
3天前
|
存储 SQL 数据库
数据库库表结构设计:原理、实例与最佳实践
数据库库表结构设计:原理、实例与最佳实践
18 0
|
7天前
|
存储 Oracle 关系型数据库
Oracle的模式与模式对象:数据库的“城市规划师”
【4月更文挑战第19天】在Oracle数据库中,模式是用户对象的集合,相当于数据库的城市规划,包含表、视图、索引等模式对象。模式对象是数据存储结构,如表用于存储数据,视图提供不同查看角度,索引加速数据定位。良好的模式与模式对象设计关乎数据效率、安全和稳定性。规划时需考虑业务需求、性能、安全和可扩展性,以构建高效数据库环境,支持企业业务发展。
|
14天前
|
存储 SQL Oracle
【Oracle】玩转Oracle数据库(二):体系结构、存储结构与各类参数
【Oracle】玩转Oracle数据库(二):体系结构、存储结构与各类参数
36 7
|
30天前
|
监控 关系型数据库 数据库
OceanBase数据库常见问题之增加内存依旧报内存不足如何解决
OceanBase 是一款由阿里巴巴集团研发的企业级分布式关系型数据库,它具有高可用、高性能、可水平扩展等特点。以下是OceanBase 数据库使用过程中可能遇到的一些常见问题及其解答的汇总,以帮助用户更好地理解和使用这款数据库产品。
|
7天前
|
关系型数据库 MySQL 分布式数据库
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
37 2

推荐镜像

更多