Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1182615
  • 博文数量: 398
  • 博客积分: 10110
  • 博客等级: 上将
  • 技术积分: 4055
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-23 20:01
个人简介

新博客http://www.cnblogs.com/zhjh256 欢迎访问

文章分类

全部博文(398)

文章存档

2012年(1)

2011年(41)

2010年(16)

2009年(98)

2008年(142)

2007年(100)

我的朋友

分类: Oracle

2007-12-25 22:29:27

·自动共享内存管理增强

       在自动共享内存管理启用时,Streams Pool将自动调整。新视图V$SGA_TARGET_ADVICE用于帮助调整SGA_TARGET

       通过设置SGA_TARGET为非0值启用自动共享内存管理,该参数将替代各组件的设置,并且可以自动和动态调整。

       使用该功能,STATISTICS_LEVEL必须为ALL/TYPICAL

       SGA_TARGET参数反映了SGA的总大小。自动调整的SGA组件以及相应的参数如下:

       Fixed SGA及其他内部分配实例本身需要 N/A

       共享池                                                            SHARED_POOL_SIZE

       大池                                                               LARGE_POOL_SIZE

       JAVA                                                           JAVA_POOL_SIZE

       缓冲缓存                                                        DB_CACHE_SIZE

       流池                                                               STREAMS_POOL_SIZE

       手工设置的使用SGA_TARGET空间的组件:

       日志缓冲                                                        LOG_BUFFER

       keep/ recycle缓冲缓存                                     DB_KEEP_CACHE_SIZE

                                                                             DB_RECYCLE_CACHE_SIZE

       非标准块缓冲缓存                                          DB_nK_CACHE_SIZE

       除了设置SGA_TARGET0,必须将全部自动调整的SGA组件设置为0以启用全自动调整这些组件的大小。

       当然可以设置一个/多个自动调整的SGA组件为非0值,该值将作为在SGA调整期间该组件的最小值。

       启用自动共享内存管理的简单方法是使用OEMEM会自动产生ALTER SYSTEMSGA_TARGET设置为指定值并且将自动调整的SGA组件设置为0;如果使用SQL*Plus,必须设置SGA_TARGET,然后设置自动调整的SGA组件设置为0或最小值。

       例子:

       启用自动共享内存管理(从手工管理模式迁移)

       1SELECT (

(SELECT SUM(value) FROM V$SGA) -

(SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY)

) "SGA_TARGET"

FROM DUAL;

       2ALTER SYSTEM SET SGA_TARGET=value [SCOPE={SPFILE|MEMORY|BOTH}]

              value可以为第一步的结果或SGA组件之和和SGA_MAX_SIZE(手工模式下有)之间的值。

       3.通过ALTER SYSTEM或更改init.ora文件执行以下之一:

          设置自动调整的SGA组件设置为0
         
设置自动调整的SGA组件设置为最小值;

       固定视图V$SGA_DYNAMIC_COMPONENTSV$SGAINFO显示当前实际的SGA组件的大小。默认情况下自动管理行为最大化系统性能和可用资源;

       自动调整和共享池

       当自动共享内存管理模式启用时,内部算法尝试根据负载最优化共享内存,由于打开的游标,钉住的PL/SQL包,通常时共享池无法收缩。因此调整算法仅会增加共享池的大小。

       动态调整SGA参数

       可以通过ALTER SYSTEM动态调整SGA_TARGET及其组件的大小。

       ·动态更改SGA_TARGET

         SGA_TARGET可以最大增加到SGA_MAX_SIZE,如果减少了SGA_TARGET,系统将会自动调整一个/多个组件释放内存。在SGA_TARGET更改是消耗的物理内存总量依赖于具体的OS,在某些UNIX平台下不支持动态共享内存,SGA使用的物理内存为SGA_MAX_SIZE参数的值。在这种OS下,设置SGA_TARGET小于SGA_MAX_SIZE不能得到实际的好处,因此不推荐在这些OS上设置SGA_MAX_SIZE

         在其他平台,如SolarisWindows上,消耗的物理内存为SGA_TARGET的值。

         调整SGA_TARGET时,仅会影响没有设置最小值的自动调整组件,任何手工配置的组件都将保持不变。

         当启用自动内存管理时,最好在数据库启动前将SGA_TARGET设置为非0。由于共享池不可收缩特征,动态更改SGA_TARGET0值到非0值可能达不到预期的结果。启动后可以动态更改SGA_TARGET

       更改自动管理组件的参数

       如果设置了组件的大小小于当前值,该组件的值不会立刻生效,新值仅限制算法在将来的最小值。

       更改手工管理组件的参数

       手工管理组件的参数也可以动态更改,并且其值声明精确值而非最小值。增加其值时,会从自动调整组件中抽取。

·使用手工共享内存管理(非102新功能

       如果没有设置SGA_TARGET启用自动共享内存管理,则必须手工配置每个SGA组件。

       设置缓冲缓存初始化参数

       可以为各种不同的块声明缓存大小,这些初始化参数都是动态的。数据库会为DB_CACHE_SIZE设置恰当的值,但是DB_nK_CACHE_SIZE默认为0,没有配置额外的非标准块缓存。缓冲缓存的大小会影响性能,较大的缓存尺寸通常能够减少物理读和写。但是过大的缓存会使用大量的内存并引起交换和内存换页。

       DB_CACHE_SIZE

       DB_CACHE_SIZE声明的值决定了标准块的数量,因此为了确定DB_CACHE_SIZE,必须决定使用的缓冲数据并且乘以DB_BLOCK_SIZE

       声明共享池的大小

       SHARED_POOL_SIZE动态初始化参数用来设置SGA组件共享池的大小,Oracle默认选择恰当的值。

       Oracle Database 10g Release 1以前,分配的共享池大小等于SHARED_POOL_SIZE+Startup overhead in Shared Pool,即使SHARED_POOL_SIZE显示为没有加上启动负载的值。

       Oracle Database 10g Release 1开始,分配的共享池大小等于SHARED_POOL_SIZE,这个参数中包含了Startup overhead in Shared Pool

       在手工管理模式下,如果SHARED_POOL_SIZE的值太小以至于无法容纳内部SGA的需求,那么将发生ORA-371错误并提供建议值。

       在自动管理模式下,共享池会自动调整并且ORA-371错误将被抑制。

       声明大池

       LARGE_POOL_SIZE动态可选设置大池的尺寸。

       声明JAVA

       JAVA_POOL_SIZE初始化参数动态设置JAVA池的大小。Oracle默认选择恰当的值。

       声明Streams Pool大小

       如果STREAMS_POOL_SIZE0,当Oracle需要内存时将从缓冲缓存抽取。

       查看SGA信息的视图

       V$SGA:显示SGA的概要信息;

       V$SGAINFO:显示详细信息;

       V$SGASTAT:显示详细信息;

       V$SGA_DYNAMIC_COMPONENTS:显示动态SGA组件的信息,该视图基于调整完成的SGA操作;

       V$SGA_DYNAMIC_FREE_MEMORY:显示SGA可供将来调整使用的空闲内存大小;

       V$SGA_RESIZE_OPS:显示最近的400SGA调整操作的信息;

       V$SGA_CURRENT_RESIZE_OPS:显示当前正在调整的SGA操作;

       V$SGA_TARGET_ADVICE:帮助调整SGA_TARGET

阅读(1894) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~