oracle 内存分配,Oracle实例中的内存分配管理

SGA(System Global Area)管理

SGA是一段共享内存区域,包含实例的数据和控制信息,多个用户可以通过这个内存区域共享数据,以避免反复、长时间的从物理磁盘访问数据。

SGA的组成:Database buffer cache存储在数据库中的数据被查询和修改前,必须将这部分数据从磁盘中读取到buffer cache中,所有用户进程共享访问这部分内存,通常,buffer cache要设置的足够大来避免频繁的磁盘I/O操作。

Shared pool共享池缓存的用户间的共享信息:反复调用的SQL 语句。

用户帐户数据、表、索引描述和权限等来自于数据字典的信息。

数据库中储存的过程这类可执行的代码。

Redo log buffer在redo信息可以被写回到物理的online redo log 文件之前,通过该buffer缓存这些信息来改善性能。

Large pool这个可选区域用于缓存各种服务进程中较大的I/O请求。

Java poolJava池用于JVM(Java Virtual Machine)中的Java代码和数据等特定会话。

Streams pool流池用于Oracle的流功能。

Result cache结果缓存缓存着查询的结果,如果一个查询执行的结果在该缓存中存在,数据库通过直接返回该结果来取代重新执行查询语句。这个组成部分用用于加速查询执行的频率。

通过下图展示SGA区的工作组成

d26f7ca0314f3b6b4aa0bd324625bf78.gif

通过连接实例查看SGA分配情况SQL> show sga;

Total System Global Area 6680915968 bytes

Fixed Size                  2213936 bytes

Variable Size            2550138832 bytes

Database Buffers         4093640704 bytes

Redo Buffers               34922496 bytes

首先,分别解释SGA组成部分

Database Buffer Cache:

在9i之前该部分的大小主要由以下两个参数决定,db_block_buffers的值表示为分配给buffer cache的缓存块数量,db_block_size表示buffer cache的一个块的大小。SQL> show parameter db_block

NAME             TYPE          VALUE

---------------- ------------- ------------------------------

db_block_buffers integer       0

db_block_size    integer       8192

因此,如果db_block_buffers的值不为0,那么Database buffer cache=db_block_buffers*db_block_size。Oracle后续引入一个新的初始化参数db_cache_size。该参数定义db_block_size的默认缓冲池的大小。

db_cache_size最小值为一个粒度(Granule)。粒度也是9i引入的一个概念,是连续虚拟内存的分配单位。其大小取决于SGA估计的总大小,SGA总大小由SGA_MAX_SIZE参数设定。

修改SGA_MAX_SIZE的大小(本实验时在11.2.0.1.0下进行测试的)SQL> alter system set sga_max_size=1G scope=spfile;

SQL> show parameter db_cache_size

NAME                   TYPE        VALUE

------------------------ ----------- ------------------------------

db_cache_size     big integer 24M

SQL> @getparDescr.sql

Enter value for get_parameters: _ksmg_granule_size

old  10:  and ksppinm like '&get_parameters%'

new  10:  and ksppinm like '_ksmg_granule_size%'

NAME                       TYPE VALUE           VALUE           DEFAULTS  DESCRIBE                        KSPPIHASH

-------------------- ---------- --------------- --------------- --------- ------------------------------ ----------

_ksmg_granule_size            3 4194304         4194304         TRUE      granule size in bytes          4165852122

从1G修改成2G可以看到粒度发生改变SQL> alter system set sga_max_size=2G scope=spfile;

SQL> @getparDescr.sql

Enter value for get_parameters: _ksmg_granule_size

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值