使用手动共享内存管理(MSMM)

使用手动共享内存管理(MSMM)


如果决定不使用自动内存管理或自动共享内存管理,则必须手动配置多个SGA组件大小,然后在数据库工作负载更改时持续监视和调整这些大小。 本节提供有关设置控制这些SGA组件大小的参数的指导。


如果使用DBCA创建数据库并选择手动共享内存管理,则DBCA将提供必须输入缓冲区高速缓存,共享池,大型池和Java池大小的字段。 然后在它创建的服务器参数文件(SPFILE)中设置相应的初始化参数。 如果使用CREATE DATABASE SQL语句和文本初始化参数文件创建数据库,则可以执行以下操作之一:
为设置SGA组件大小的初始化参数提供值。
从文本初始化文件中省略SGA组件大小参数。 Oracle数据库为您没有设置大小的任何组件选择合理的默认值。


启用手动共享内存管理
没有初始化参数本身可以启用手动共享内存管理。 通过禁用自动内存管理和自动共享内存管理,可以有效地启用手动共享内存管理。


要启用手动共享内存管理:
将MEMORY_TARGET初始化参数设置为0。
将SGA_TARGET初始化参数设置为0。
然后,您必须为各种SGA组件设置值,如以下各节所述。

1、设置缓冲区缓存初始化参数
缓冲区高速缓存初始化参数确定SGA的缓冲区高速缓存组件的大小。您可以使用它们为数据库使用的各种块大小指定高速缓存的大小。这些初始化参数都是动态的。
缓冲区高速缓存的大小影响性能。较大的缓存大小通常会减少磁盘读取和写入的次数。但是,大容量缓存可能占用太多的内存并导致内存分页或交换。
Oracle数据库支持多个块大小。如果使用非标准块大小创建表空间,则必须配置非标准块大小缓冲区以适应这些表空间。标准块大小用于SYSTEM表空间。您可以通过设置初始化参数DB_BLOCK_SIZE来指定标准块大小。合法值从2K到32K。
如果您打算在数据库中使用多个块大小,则必须具有DB_CACHE_SIZE和至少一个DB_nK_CACHE_SIZE参数集。 Oracle数据库为DB_CACHE_SIZE参数分配一个适当的默认值,但DB_nK_CACHE_SIZE参数默认为0,并且没有配置额外的块大小缓存。
非标准块大小缓冲区的大小和数量由以下参数指定:
DB_2K_CACHE_SIZE
DB_4K_CACHE_SIZE
DB_8K_CACHE_SIZE
DB_16K_CACHE_SIZE
DB_32K_CACHE_SIZE
每个参数指定相应块大小的高速缓存大小。
注意:有关最大块大小的特定于平台的限制适用,因此某些平台可能不支持这些大小。
示例:
DB_BLOCK_SIZE=4096
DB_CACHE_SIZE=1024M
DB_2K_CACHE_SIZE=256M
DB_8K_CACHE_SIZE=512M
注意:DB_nK_CACHE_SIZE参数不能用于调整标准块大小的缓存大小。 如果DB_BLOCK_SIZE的值是nK,则设置DB_nK_CACHE_SIZE是无效的。 标准块大小的缓存大小始终由DB_CACHE_SIZE的值确定。
缓存的大小是有限的,所以并不是磁盘上的所有数据都可以放入缓存中。缓存满时,后续的缓存未命中导致Oracle数据库将已存在缓存中的脏数据写入磁盘,以便为新数据腾出空间。 (如果缓冲区不是脏的,在将新块读入缓冲区之前不需要写入磁盘。)随后访问任何写入磁盘然后被覆盖的数据会导致额外的缓存未命中。
高速缓存的大小影响数据请求导致高速缓存命中的可能性。如果缓存很大,则更可能包含请求的数据。增加缓存的大小会增加导致缓存命中的数据请求的百分比。
您可以在实例运行时更改缓冲区高速缓存的大小,而不必关闭数据库。用ALTER SYSTEM语句来做到这一点。
使用固定视图V$BUFFER_POOL来跟踪不同缓存组件的大小以及任何未决的调整大小操作。
多个缓冲池
您可以使用单独的缓冲池来配置数据库缓冲区缓存,这些缓冲池可以将数据保留在缓冲区缓存中,或者在使用数据块后立即使缓冲区可用于新数据。 然后可以将特定的模式对象(表,群集,索引和分区)分配给相应的缓冲池,以控制其数据块超时的方式。
KEEP缓冲池将架构对象的数据块保留在内存中。
RECYCLE缓冲池在不再需要时立即从内存中消除数据块。
DEFAULT缓冲池包含未分配给任何缓冲池的模式对象的数据块以及明确分配给DEFAULT池的模式对象。
配置KEEP和RECYCLE缓冲池的初始化参数是DB_KEEP_CACHE_SIZE和DB_RECYCLE_CACHE_SIZE。
注意:多个缓冲池仅适用于标准块大小。 非标准块大小缓存具有一个DEFAULT池。


2、指定共享池大小
SHARED_POOL_SIZE初始化参数是一个动态参数,可让您指定或调整SGA的共享池组件的大小。 Oracle数据库选择一个适当的默认值。
在Oracle数据库10g第1版之前的版本中,分配的共享池内存量等于SHARED_POOL_SIZE初始化参数的值加上实例启动期间计算的内部SGA开销量。内部SGA开销是指Oracle数据库在启动期间根据其他几个初始化参数的值分配的内存。该内存用于维护SGA中不同服务器组件的状态。例如,如果SHARED_POOL_SIZE参数设置为64 MB,并将内部SGA开销计算为12 MB,则共享池的实际大小为64 + 12 = 76 MB,但SHARED_POOL_SIZE参数的值仍显示为64 MB。开始对于Oracle数据库10g第1版,内部SGA开销的大小包含在用户指定的值SHARED_POOL_SIZE中。如果您没有使用自动内存管理或自动共享内存管理,则启动时分配的共享池内存量等于初始化参数SHARED_POOL_SIZE的值(四舍五入为颗粒大小的倍数)。因此,您必须设置此参数,使其包含内部SGA开销以及共享池大小的所需值。在前面的示例中,如果SHARED_POOL_SIZE参数在启动时设置为64MB,则启动后可用的共享池为64-12 = 52MB,假定内部SGA开销值保持不变。为了在启动后保持共享池内存的有效值为64MB,您必须将SHARED_POOL_SIZE参数设置为64 + 12 = 76MB。
从早于Oracle数据库10g第1版的版本进行迁移时,Oracle数据库11g迁移实用程序根据升级前环境中的内部SGA开销的值并基于此值的旧值为此参数推荐一个新值 参数。 从Oracle数据库10g开始,可以从V $ SGAINFO视图中查询内部SGA开销(也称为共享池中的启动开销)的确切值。 另外,在手动共享内存管理模式下,如果用户指定的SHARED_POOL_SIZE值太小,甚至不能满足内部SGA开销的要求,那么Oracle数据库在启动过程中会生成一个ORA-371错误,并提供用于 SHARED_POOL_SIZE参数。当您在Oracle数据库11g中使用自动共享内存管理时,将自动调整共享池,并且不会生成ORA-371错误。
结果缓存和共享池大小
结果缓存从共享池中获取内存。 因此,如果您希望增加结果缓存的最大大小,请在调整共享池大小时考虑这一点。


3、指定Large Pool大小
LARGE_POOL_SIZE初始化参数是一个动态参数,可让您指定或调整SGA的大型池组件的大小。 大池是SGA的可选组件。 如果要创建大型池,则必须专门设置LARGE_POOL_SIZE参数。


4、指定Java池大小
JAVA_POOL_SIZE初始化参数是一个动态参数,可让您指定或调整SGA的Java池组件大小。


5、指定Java池大小
JAVA_POOL_SIZE初始化参数是一个动态参数,可让您指定或调整SGA的Java池组件大小。


6、指定流池大小
STREAMS_POOL_SIZE初始化参数是一个动态参数,可用于指定或调整SGA的Streams Pool组件的大小。 如果STREAMS_POOL_SIZE设置为0,则在需要时,Oracle Streams产品将内存从缓冲区高速缓存传输到Streams池。


7、指定结果缓存最大大小
RESULT_CACHE_MAX_SIZE初始化参数是一个动态参数,使您可以指定SGA的结果缓存组件的最大大小。通常,不需要指定此参数,因为缺省最大大小是由数据库根据SGA可用的总内存和当前使用的内存管理方法选择的。您可以通过显示RESULT_CACHE_MAX_SIZE参数的值来查看当前的默认最大大小。如果要更改此最大大小,可以使用ALTER SYSTEM语句设置RESULT_CACHE_MAX_SIZE,也可以在文本初始化参数文件中指定此参数。在每种情况下,该值都向上舍入到最接近32K的倍数。
如果实例启动时RESULT_CACHE_MAX_SIZE为0,则结果缓存被禁用。要重新启用它,您必须将RESULT_CACHE_MAX_SIZE设置为非零值(或从文本初始化参数文件中除去此参数以获取默认最大大小),然后重新启动数据库。
请注意,在禁用结果缓存的情况下启动数据库后,如果使用ALTER SYSTEM语句将RESULT_CACHE_MAX_SIZE设置为非零值,但不重新启动数据库,则查询RESULT_CACHE_MAX_SIZE参数的值将返回非零值,即使结果缓存为仍然不可用。因此,RESULT_CACHE_MAX_SIZE的值不是确定结果缓存是否被启用的最可靠的方式。您可以改为使用以下查询:
SELECT dbms_result_cache.status() FROM dual;
结果缓存从共享池中获取内存,因此如果增加最大结果缓存大小,则还应考虑增加共享池大小。
视图V$RESULT_CACHE_STATISTICS和PL/SQL包过程DBMS_RESULT_CACHE.MEMORY_REPORT显示信息可帮助您确定当前分配给结果缓存的内存量。
PL/SQL包函数DBMS_RESULT_CACHE.FLUSH清除结果缓存并将所有内存释放回共享池。


8、指定其他SGA初始化参数
您可以设置一些额外的初始化参数来控制SGA如何使用内存。


物理内存
LOCK_SGA参数设置为TRUE时,会将整个SGA锁定到物理内存中。此参数不能与自动内存管理或自动共享内存管理结合使用。


SGA起始地址
SHARED_MEMORY_ADDRESS和HI_SHARED_MEMORY_ADDRESS参数指定运行时的SGA起始地址。这些参数很少使用。对于64位平台,HI_SHARED_MEMORY_ADDRESS指定64位地址的高位32位。


扩展缓冲区缓存机制
USE_INDIRECT_DATA_BUFFERS参数允许使用可支持超过4 GB物理内存的32位平台的扩展缓冲区高速缓存机制。在不支持这么多物理内存的平台上,该参数将被忽略。此参数不能与自动内存管理或自动共享内存管理结合使用。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值