Oracle从10g开始建议使用内存自动管理,通过设置初始化参数SGA_TARGET 和PGA_AGGREGATE_TARGET的大小来达到自动管理内存的目的。但你也可以手工调整。 下面我们将讨论以下主题: -理解内存分配 -配置buffer cache -配置shared pool和large pool -配置redo log buffer -PGA内存管理 理解内存分配 Oracle把信息是存储在磁盘中和缓冲在内存里。内存访问的速度比磁盘速度快很多,和内存相比,磁
盘访问消耗大量的时间在physical I/O上,而且还会在磁盘驱动路径计算和操作系统调度上消耗CPU资
源。由于这个原因,在内存存取数据要比磁盘高效得多。 一个非常重要的性能目标,就是尽可能的减少物理IO,通过更多在内存上重新获得数据。 Oracle强烈建议使用自动内存管理。(DBA的作用被machine代替了....) Oracle企业管理区提供内存分配的建议: 在Database页面Related Links下点击Advisor Central,在Advisor Central页面点击Memory Advisor访问
Memory Parameters SGA and PGA页面。 动态改变缓存大小 如果没有使用自动内存管理,也可以动态的改变shared pool, large pool, buffer cache, 和 process-private memory的大小。下面我们将讨论这个话题: 这些pool通过诸如DB_CACHE_ADVICE, JAVA_POOL_SIZE, LARGE_POOL_SIZE, LOG_BUFFER, 和SHARED_POOL_SIZE参数配置,可以通过ALTER SYSTEM进行动态修改。 Oracle 内存缓冲 Oracle主要的内存缓冲包括: ■ Shared pool ■ Large pool ■ Java pool ■ Buffer cache ■ Streams pool size ■ Log buffer ■ Process-private memory(用于排序和hash joins) 自动共享内存管理 自动共享内存管理简化了SAG的配置,建议使用。通过设置SGA_TARGET非0和设置STATISTICS_LEVEL
为TYPICAL 或者ALL。SGA_TARGET是你准备使用的SGA内存总量。为了正常的运行,数据库将分配以
下内存池: ■Database buffer cache (default pool) ■ Shared pool ■ Large pool ■ Java pool ■ Streams pool 如果有必要,你可以在初始化参数中设置这些参数的最小值。 通过企业管理器,在Memory Parameters SGA页面,SGA_TARGET可以动态改变。通过查询
V$SGA_TARGET_ADVICE视图,可以查看SGA大小的建议,使用ALTER SYSTEM命令改变SGA大小,但要
小于等于SGA_MAX_SIZE。改变这个值以后,Oracle会自动的调整pools的大小。 反之,在启动的时候设置SGA_TARGET为0,内存就不会自动分配,可以通过手工配置
DB_CACHE_SIZE, SHARED_POOL_SIZE, LARGE_POOL_SIZE,JAVA_POOL_SIZE, 和STREAMS_POOL_SIZE来
分配SGA。 下面的一些池是不会受自动内存管理影响的: ■ Log buffer ■ KEEP, RECYCLE, 和其它非默认块大小的pool ■ 固定SGA和其它内部分配 通过设置DB_KEEP_CACHE_SIZE,DB_RECYCLE_CACHE_SIZE, DB_nK_CACHE_SIZE, 和LOG_BUFFER来设置
这些pool的值。但log buffer pool 和process-private memory必须重启才能生效。 内存的最小分配单位成为颗粒。如果SGA小于1G,那么为4M。如果大于1G,则为16M。颗粒的大小在
实例启动后,是不会改变的。当前系统使用的颗粒大小,可以通过视图
V$SGA_DYNAMIC_COMPONENTS来查看。 SGA的最大大小是由SGA_MAX_SIZE决定的,它不能被动态改变。 关于动态的改变内存分配的一些视图: V$SGA_CURRENT_RESIZE_OPS:SGA当前的调整情况 V$SGA_RESIZE_OPS:至少800次对SGA的调整情况记录,但不包括当前的。 V$SGA_DYNAMIC_COMPONENTS:SGA的组成信息,包含所有已经完成调整后的信息。 V$SGA_DYNAMIC_FREE_MEMORY:下一次内存分配可使用的空闲内存量。 应用程序应该考虑: 配置内存的时候,要考虑应用的需求,反之对应用使用的缓存的调优能显著改善资源需求,诸如latch
锁,CPU,I/O。 缓存应该被设计为最高效的使用操作系统和数据库的资源。 Oracle的内存分配应该和应用的需求息息相关。 如果你的应用使用了java,那应该考虑是否要调整java pool。 操作系统内存的使用 大多数操作系统应该考虑以下: 减少内存分页,分页发生在内存把数据转存到磁盘的过程中。分页会降低性能。使用操作系统的工具
来检测是否发生了大量的分页。 锁定SGA在内存中 在大多数系统中,设置LOCK_SGA=ture,将不会发生分页。
原文:http://valen.blog.ccidnet.com/blog-htm-itemid-150747-do-showone-type-blog-uid-51502.html |