oracle推荐OLTP(on-line TransactionProcessing)系统oracle占系统总内存的80%,然后再分配80%给SGA,20%给PGA。也就是
SGA=system_total_memory*80%*80%
PGA=system_total_memory*80%*20%
1、SGA系统全局区
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之间,不应该太大 |
语句:(Oracle10server须要重新启动)
序号 |
查看语句 |
改动语句 |
1 |
show parameter sga_max_size; |
alter system set sga_max_size=2000m scope=spfile; |
2 |
show parameter sga_target; |
alter system set sga_target=2000m scope=spfile; |
3 |
show parameter pga_aggregate_target; |
alter system set pga_aggregate_target=500m scope=spfile; |
2、PGA程序全局区
PGA:包括单个server进程或单个后台进程的数据和控制信息,与几个进程共享的SGA 正相反PGA 是仅仅被一个进程使用的区域,PGA在创建进程时分配在终止进程时回收.
A、Sort_area_size 用于排序所占内存
B、Hash_area_size 用于散列联接,位图索引
这两个參数在非MTS下都是属于PGA ,不属于SGA,是为每一个session单独分配的,在我们的server上除了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所指定的值。