日期:2014-05-16 浏览次数:20506 次
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服务器需要重启)
| 
 序号  | 
 查看语句  | 
 修改语句  | 
| 
 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;  | 
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所指定的值。