体系结构之实例与内存结构一

实例的概念实例是由内存区与系统进程组成

用户在访问oracle数据库时,主要是访问实例,再由实例访问数据库,并返回相应的操作结果

实例与数据库的对应关系是:

一个数据库对应一个实例,但除非在oracle的RAC集群模式下是一个数据库对应多个实例


可以把实例和数据库理解为两个互相有关联的独立个体 内存结构 SGA:系统全局区(system global area) 用来存放操作系的数据.库缓存.数据字典等控制信息的内存区域.这块区域中的大多数内容都是共享存在的,几乎所有的oracle进程都会访问这块内存中的数据

PGA:进程全局区(process global area)服务进程专用的内存区域,该内存区域是非共享.

UGA:用户全局区(user global area)用来保存用户的会话信息,但这个区域不是独立存在的.如果是专用服务器模式,UGA保存在PGA中,如果是共享服务器模式,UGA保存在SGA中.

注意:内存的配置大小对oracle数据库的性能影响最大. SGA的组成结构 SGA 是一组用来缓存数据中数据及控制信息的内存结构,其中的大部分信息都是共享存在的.

操作系统分配给oracle数据库的内存资源,一半以上会由SGA占用

SGA组成结构:
共享池(shared pool)
数据缓冲区(database buffer cache)
重做日志缓冲区(redolog buffer)
java池(java pool)
大池(large pool)
流池(streams pool)

数据库和实例的状态,这部分区域被称为固定SGA(fixedSGA),这块区域不涉及用户的操作的数据,而且也无法修改和调整

内存空间的修改的使用参数
SHARED_POOL_SIZE 控制共享区大小
DB_*_CACHE_SIZE 共有8个相关的CACHE_SIZE参数,分别用来控制各个数据缓冲区的大小
LOG_BUFFER 控制重做日志缓冲区的大小
JAVA_POOL_SIZE 控制java池的大小
LARGE_POOL_SIZE 控制大池的大小
STREAMS_POOL_SIZE 控制流池的大小


还有两个非常重要的参数 作用于SGA内存区的
SGA_TARGET 控制SGA自动内存管理
SGA_MAX_SIZE 控制实例运行时SGA最大能使用的内存控制 设置与SGA相关的初始化参数直接支持修改当前内存中参数值的SGA参数有:
SHARED_POOL_SIZE / JAVA_POOL_SIZE / LARGE_POOL_SIZE / STREAMS_POOL_SIZE / DB_CACHE_SIZESGA_TARGET

修改语法格式:

ALTER SYSTEM SET '参数= __';

如:

SQL> alter system set db_cache_size=192m;

System altered.

SQL>

在配置SGA时 粒度的概念

SGA小于1GB 一粒度单位 为4MB 大于1GB时一粒度单位为16MB,对于32位的windows大于1GB一粒度为8MB

注意:实际设置的值必须是粒度的整倍数,如果不是整倍数,oracle会自动进程调整.


查看粒度动态视图

$sga_dynamic_components dynamic 动态的,活动的

SQL> desc v$sga_dynamic_components
Name Null? Type
----------------------------------------- -------- ----------------------------
COMPONENT VARCHAR2(64) 组成部分
CURRENT_SIZE NUMBER
MIN_SIZE NUMBER
MAX_SIZE NUMBER
USER_SPECIFIED_SIZE NUMBER
OPER_COUNT NUMBER
LAST_OPER_TYPE VARCHAR2(13)
LAST_OPER_MODE VARCHAR2(9)
LAST_OPER_TIME DATE
GRANULE_SIZE NUMBER 粒度大小





1* select component,granule_size from v$sga_dynamic_components
SQL> /

COMPONENT GRANULE_SIZE
------------------------------ ------------
shared pool 4194304
large pool 4194304
java pool 4194304
streams pool 4194304
DEFAULT buffer cache 4194304
KEEP buffer cache 4194304
RECYCLE buffer cache 4194304
DEFAULT 2K buffer cache 4194304
DEFAULT 4K buffer cache 4194304
DEFAULT 8K buffer cache 4194304
DEFAULT 16K buffer cache 4194304
DEFAULT 32K buffer cache 4194304
ASM Buffer Cache 4194304

13 rows selected.

SQL> 设置与SGA相关的初始化参数----------SGA_MAX_SIZE 在设置SGA区内的内存池分配时,除了考虑粒度外,还要考虑到SGA_MAX_SIZE的参数值.

SGA_MAX_SIZE参数是SGA总内存的上限.不一定就是被SGA实际全部占用,但SGA内的各个部分的内存加起来不能超过SGA_MAX_SIZE参数值否则报ORA_00384错误


SQL> alter system set db_cache_size=2000m;
alter system set db_cache_size=2000m
*
ERROR at line 1:
ORA-32017: failure in updating SPFILE <==spfile 更新失败
ORA-00384: Insufficient memory to grow cache <==内存不足够扩展缓存


调整SGA_MAX_SIZE
SGA_MAX_SIZE 初始化参数在实例运行时有效,如果启动时各部分区域的参数值超出了SGA_MAX_SIZE的值,那么实例启动过程中会忽略,

查看SGA大小

视图:
v$sga
v$sgainfo

[oracle@fs22 dbs]$ echo $[285212672/1024/1024]
272
[oracle@fs22 dbs]$

SQL> show parameter sga_max_size 在参数里查看sga_max_size的大小

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_max_size big integer 272M
SQL>

SQL> show sga

Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes 系统固定占用部分,用来存储数据库和实例的状态等信息
Variable Size 71304784 bytes 包括share pool / large pool / java pool / streams pool几部分的值
Database Buffers 209715200 bytes 数据缓冲区大小
Redo Buffers 2973696 bytes 重做日志缓冲区大小
SQL>

SQL> select * from v$sga;

NAME VALUE
-------------------- ----------
Fixed Size 1218992
Variable Size 71304784
Database Buffers 209715200
Redo Buffers 2973696

SQL> select sum(value) from v$sga;

SUM(VALUE)
----------
285212672

SQL>


查看SGA各组成区域的大小
SQL> select name,bytes/1024/1024 "size" from v$sgainfo;

NAME size
-------------------------------- ----------
Fixed SGA Size 1.16252136
Redo Buffers 2.8359375
Buffer Cache Size 200
Shared Pool Size 56
Large Pool Size 4
Java Pool Size 8
Streams Pool Size 0
Granule Size 4
Maximum SGA Size 272
Startup overhead in Shared Pool 36
Free SGA Memory Available 0

11 rows selected.

SQL> 设置与SGA相关的初始化参数----------SGA_MAX_SIZE值的修改与注意事项调整SGA_MAX_SIZE
SGA_MAX_SIZE 初始化参数在实例运行时有效,如果启动时各部分区域的参数值超出了SGA_MAX_SIZE的值,那么实例启动过程中会忽略该参数的当前值,并修改该参数值为SGA的最大值

SQL> select name,bytes/1024/1024 "size" from v$sgainfo;

NAME size
-------------------------------- ----------
Fixed SGA Size 1.16252136
Redo Buffers 2.8359375
Buffer Cache Size 200
Shared Pool Size 56
Large Pool Size 4
Java Pool Size 8
Streams Pool Size 0
Granule Size 4
Maximum SGA Size 272
Startup overhead in Shared Pool 36
Free SGA Memory Available 0

[oracle@fs22 dbs]$ vim initmfs.ora
[oracle@fs22 dbs]$ cat initmfs.ora |grep shared_pool_size
mfs.__shared_pool_size=91303168 源值shared_pool_size=71303168
[oracle@fs22 dbs]$ echo $[91303168/1024/1024]
87
[oracle@fs22 dbs]



SQL> select name,bytes/1024/1024 from v$sgainfo;

NAME BYTES/1024/1024
-------------------------------- ---------------
Fixed SGA Size 1.16252136
Redo Buffers 2.8359375
Buffer Cache Size 180
Shared Pool Size 80
Large Pool Size 4
Java Pool Size 4
Streams Pool Size 0
Granule Size 4
Maximum SGA Size 272
Startup overhead in Shared Pool 36
Free SGA Memory Available 0 SGA的自动管理 SGA自动管理参数是SGA_TARGET

SGA_TARGET参数指定了能够供整个SGA_MAX_SIZE区使用的最大内存容量,注意的是SGA_TARGET的值也不能超过SGA_MAX_SIZE的大小.

SGA_TARGET在10g环境下只有以下5个部分会在实例运行过程中,由oracle自动调整
SHARED_POOL_SIZE 控制共享区大小
DB_CACHE_SIZE 数据缓冲区
JAVA_POOL_SIZE 控制java池的大小
LARGE_POOL_SIZE 控制大池的大小
STREAMS_POOL_SIZE 控制流池的大小


因为有SGA_TARGET参数的存在,如果当值为非0时,SGA中部分实际使用的内存可能与DBA手动设置的初始化参数中的内存大小不相同,如果手工设置db_cache_size为500MB 那实例运行过程中,database_buffer_cache可能使用800MB内存
如:

SQL> select name,bytes/1024/1024 from v$sgainfo where name='Shared Pool Size';

NAME size sga_target自动分配的
-------------------------------- ----------
Shared Pool Size 56


[oracle@fs22 dbs]$ vim initmfs.ora
[oracle@fs22 dbs]$ cat initmfs.ora |grep shared_pool_size
mfs.__shared_pool_size=91303168 <==手动修改的 源值shared_pool_size=71303168
[oracle@fs22 dbs]$ echo $[91303168/1024/1024]
87
[oracle@fs22 dbs]



SQL> select name,bytes/1024/1024 from v$sgainfo where name='Shared Pool Size';

NAME BYTES/1024/1024 手动修改后的
-------------------------------- ---------------
Shared Pool Size 84

SQL>

SQL> show parameter sga_target

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_target big integer 272M


当sga_target 值大于0时则SGA会自动备份,值等于0时则有DBA手动设置相关初始化参数控制SGA内存分配

statistics level 统计等级 收集到足够的统计信息 否则没有相关的统计信息做参照,就无法确定如何分配SGA各部分的内存

SQL> show parameter statistics_level;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
statistics_level string TYPICAL
SQL>

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22279684/viewspace-663120/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22279684/viewspace-663120/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值