天天看点

Oracle sga、pga介绍修改

oracle推荐oltp(on-line transactionprocessing)系统oracle占系统总内存的80%,然后再分配80%给sga,20%给pga。也就是

sga=system_total_memory*80%*80%

pga=system_total_memory*80%*20%

sga指系统全局区域(system globalarea),是用于存储数据库信息的内存区,该信息为数据库进程所共享。

设置sga时,理论上sga可占os系统物理内存的1/2——1/3 

原则:sga+pga+os使用内存<总物理ram  ——比例一般是2(sga):1(pga):1(os系统)

sga=((db_block_buffers*blocksize)+(shared_pool_size+large_pool_size+java_pool_size+log_buffers)+1mb 

查看 desc v$sga   select * fromv$sga ;  select *

from v$sgastat t;

序号

内存名称

byte

1024byte=1k

说明

大小设置

1

fixed size

1415972

存储了sga 各部分组件的信息,可以看作引导建立sga的区域。

一般固定大小,不修改

2

variable size

1059677404

包含了shared_pool_size、

java_pool_size、large_pool_size

shared_pool_size   10%

java_pool_size     >20m(不用java 30m)

large_pool_size   5-10m(不用mts不该太大

3

database buffers

511705088

数据缓存池(缓存数据)

40%

4

redo buffers

4259840

日志缓存池(修改信息)

128k ---- 1m之间,不应该太大

语句:(oracle10服务器需要重启)

查看语句

修改语句

show parameter sga_max_size;

alter system set sga_max_size=2000m scope=spfile;

show parameter sga_target;

alter system set sga_target=2000m scope=spfile;

show parameter pga_aggregate_target;

alter system set pga_aggregate_target=500m scope=spfile;

pga:包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的sga 正相反pga 是只被一个进程使用的区域,pga在创建进程时分配在终止进程时回收. 

a、sort_area_size 用于排序所占内存 

b、hash_area_size 用于散列联接,位图索引 

这两个参数在非mts下都是属于pga ,不属于sga,是为每个session单独分配的,在我们的服务器上除了os + sga,一定要考虑这两部分 

原则:os

使用内存+sga+并发执行进程数*(sort_area_size+hash_ara_size+2m)<

0.7*总内存

oracle 10g提供了pga内存的自动管理。参数pga_aggregate_target可以指定pga内存的最大值。当参数 pga_aggregate_target大于0时,oracle将自动管理pga内存,并且各进程的所占pga之和,不大于 pga_aggregate_target所指定的值。