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所指定的值。