日期:2014-05-16  浏览次数:20500 次

oracle 内存分配和调优总结<转>

oracle 内存分配和调优 总结

? ? ? ? 一直都想总结一下oracle内存调整方面的知识,最近正好优化一个数据库内存参数,查找一些资料并且google很多下。现在记录下来,做下备份。? ? ? ??
?
? ? ? ?一、概述:?? ? ?? ? ? ? ??
?
oracle 的内存可以按照共享和私有的角度分为系统全局区和进程全局区,也就是 SGA和 PGA(process global area or private global area)。对于 SGA 区域内的内存来说,是共享的全局的,在 UNIX 上,必须为 oracle 设置共享内存段(可以是一个或者多个),因为 oracle 在UNIX 上是多进程;而在 WINDOWS 上 oracle 是单进程(多个线程),所以不用设置共享内存段。PGA 是属于进程(线程)私有的区域。在 oracle 使用共享服务器模式下(MTS),PGA中的一部分,也就是 UGA 会被放入共享内存 large_pool_size 中。
?
? ? ? ?发张图oracle内存架构组成,按照图上面的显示可以一目了然关键的参数和参数名称:
?
? ? ? ?
?
对于 SGA 部分,我们通过 sqlplus 中查询可以看到:
?
SQL> select * from v$sga;?
NAME ? ? ? ? ? ? ? ?VALUE?
---------- ? ? ? ? ? ? --------------------
Fixed Size ? ? ? ? ? ? ? ? ? 454032?
Variable Size ? ? ? ? ? ? 109051904?
Database Buffers ? ? ? ? ? ? 385875968?
Redo Buffers ? ? ? ? ? ? ? ?667648?
?
Fixed Size: ?? ? ??
oracle 的不同平台和不同版本下可能不一样,但对于确定环境是一个固定的值,里面存储了 SGA 各部分组件的信息,可以看作引导建立 SGA 的区域。
?
Variable Size :?? ? ??
包含了 shared_pool_size、java_pool_size、large_pool_size 等内存设置
?
Database Buffers :? ?? ?
指数 据缓 冲区: ? ? ? ??
在 8i 中包 含 db_block_buffer*db_block_size、buffer_pool_keep、buffer_pool_recycle 三 部 分内 存 。?? ? ? ??
在 9i 中 包 含 db_cache_size 、db_keep_cache_size、db_recycle_cache_size、db_nk_cache_size。
?
Redo Buffers :? ?? ??
指日志缓冲区,log_buffer。在这里要额外说明一点的是,对于 v$parameter、v$sgastat、v$sga 查询值可能不一样。v$parameter 里面的值,是指用户在初
始化参数文件里面设置的值,v$sgastat 是 oracle 实际分配的日志缓冲区大小(因为缓冲区的分配值实际上是离散的,也不是以 block 为最小单位进行分配的),
v$sga 里面查询的值,是在 oracle 分配了日志缓冲区后,为了保护日志缓冲区,设置了一些保护页,通常我们会发现保护页大小大约是 11k(不同环境可能不一样)。? ? ? ?
?
?
二、SGA内参数及设置:?? ? ? ? ? ??
?
2.1 ?Log_buffer?
?
对于日志缓冲区的大小设置,通常我觉得没有过多的建议,因为参考 LGWR 写的触发条件之后,我们会发现通常超过 3M 意义不是很大。作为一个正式系统,
可能考虑先设置这部分为 log_buffer=3—5M ?大小,然后针对具体情况再调整。
?
log_buffer是Redo log的buffer。
因此在这里必须要了解Redo Log的触发事件(LGWR)
1、当redo log buffer的容量达到1/3
2、设定的写redo log时间间隔到达,一般为3秒钟。