Oracle 在9i版本之前,需要对内存参数手动设置,由于系统的负载是动态变化的,很难设置一个合适的值。
在Oracle9i版本之后,有了自动内存管理的功能,大大方便了DBA的工作。只要对PGA,SGA,Log_buffer 三个参数值设置好,Oralce会根据系统的负载动态平衡各个参数的设置。
如何设置PGA的参数:
在Oracle EM 内存参数页面,可以查看Oracle 对于PGA的建议,这是Oracle对当前时间以来系统的负载预估出来相应的PGA及对当前系统的性能的提高比例。
也可以通过查询下面的表
SELECT PGA_TARGET_FOR_ESTIMATE / 1024 / 1024,
?????? PGA_TARGET_FACTOR,
?????? BYTES_PROCESSED, --TOTAL BYTES PROCESSED BY ALL THE WORK AREAS CONSIDERED BY THIS ADVICE (IN BYTES)
?????? ESTD_EXTRA_BYTES_RW, --? ESTIMATED NUMBER OF EXTRA BYTES WHICH WOULD BE READ OR WRITTEN IF PGA_AGGREGATE_TARGET WAS SET TO THE VALUE OF THE PGA_TARGET_FOR_ESTIMATE COLUMN.
?????? ESTD_PGA_CACHE_HIT_PERCENTAGE, --预计CACHE数据的命中率,计算公式 BYTES_PROCESSED / (BYTES_PROCESSED + ESTD_EXTRA_BYTES_RW)
?????? ESTD_OVERALLOC_COUNT --若非0,则意味着PGA不够大,不能够去处理工作区域的工作量
? FROM V$PGA_TARGET_ADVICE
?ORDER BY PGA_TARGET_FOR_ESTIMATE
-------------------------------------------------
设置SGA:
在Oracle EM 内存参数页面,可以查看Oracle 对于SGA的建议,这是Oracle对当前时间以来系统的负载预估出来的相应的PGA及对当前系统的性能的提高比例。
也可以通过查询下面的表
SELECT SGA_SIZE, --SGA的大小
?????? SGA_SIZE_FACTOR, --以当前sga为比重,每个sga size的比例
?????? ESTD_DB_TIME, --所有session活动时间的总和,内存越大,相对处理的时间就越短
?????? ROUND(100 * ((1 - A.ESTD_DB_TIME_FACTOR) / 1), 2), --针对当前的SGA改善的百分比
?????? ESTD_PHYSICAL_READS --预计物理读
? FROM V$SGA_TARGET_ADVICE A
?ORDER BY SGA_SIZE;
-----------------------------------------------
设置log buffer
一般情况下不用设置这个值,默认值即可,oracle的LGWR会频繁的把此缓存的内容写入磁盘。
------------------------------------------------
SGA 的结构:
1.DATA BUFFER CACHE --数据缓存,读取数据须先把磁盘的数据写入此块区域(*)
--SHOW PARAMETER DB_CACHE_SIZE
2.SHARED POOL--共享池
? A.LIBRARY CACHE --解析过的SQL存放的区域
???? A1.解析SQL
???? A2.解析PLSQL
? B.DICTIONARY CACHE --数据字典的缓存区域,提高解析SQL的性能
--SHOW PARAMETER SHARED_POOL_SIZE
3.LOG BUFFER--日志缓存,后由LGWR进程写入磁盘(*)
--SHOW PARAMETER LOG_BUFFER
4.JAVA POOL
--SHOW PARAMETER JAVA_POOL
5