oracle 自动内存管理

本文介绍Oracle 11g中的自动内存管理特性,包括自动共享内存管理和自动PGA内存管理。详细讲解如何配置memory_target参数以实现SGA和PGA的自动调整,并提供了实例配置步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自动内存管理类型

  • 自动内存管理:oracle 11g的新特性,允许数据库完全自动地管理内存的SGA和PGA组件
  • 自动共享内存管理:应用此选择,可以自动管理SGA,但是不自动管理PGA。
  • 自动PGA内存管理:此选项只能自动管理SGA。
  • 手动共享内存管理:手动设置SGA的组件尺寸,如:shared_pool,data_buffer
  • 手动PGA管理:手动设置PGA组件尺寸

开启自动内存管理

     为开启自动内存管理,必须设置memory_target参数,该参数设置实例的目标内存。也可以指定memory_max_target初始化参数设置一个实例的最大内存尺寸

       在用新的自动内存管理特性给数据库分配适当的尺寸之前,必须首先查找当前有多少内存分配给了SGA和PGA。但是并不意味简单的将sga_target和pga_target参数求和相加的内存需求。原因是:与sga_target参数不同,数据库不立即接管分配给pga_target参数的内存。数据库只根据pga_target参数设置将PGA分配给每个部分,因此,你的pga_target也许分配得很大,但是数据库在给定时间内却只是用了很小的一部分。

因此需要做如下操作,来确定自动内存管理的内存大小

1、查找当前SGA大小

SQL> show parameter sga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_target                           big integer  600M


2、查找给定时间内分配给PGA的大小

SQL> select value from v$pgastat where name='maximum PGA allocated';

     VALUE
----------
 248707072

3、2步得到的查询结果显示PGA分配的最大内存大约为236M,执行一下操作 得到一个错误的PGA估计

SQL> show parameter pga_

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target                 big integer  400000000

4、通过将SGA_TARGET参数值和实例启动以来分配给PGA最大的内存值相加,选择memory_target参数值。(600+236)。如果需要,也可以设置memory_max_target,如果不给定该参数值,将使用memory_target的值。

设置:

alter system set memory_target=1200M scope=spfile;

alter system set memory_max_target=1000M scope=spfile;

alter system set sga_target=1200M scope=spfile;

alter system set pga_aggregate_target=1200M scope=spfile;


oracle内存管理方法的总结

InstanceSGAPGADescriptionInitialization Parameters

Auto

n/a

n/a

The database tunes the size of the instance based on a single instance target size.

You set:

  • Total memory target size for the database instance (MEMORY_TARGET)

  • Optional maximum memory size for the database instance (MEMORY_MAX_TARGET)

n/a

Auto

Auto

The database automatically tunes the SGA based on an SGA target.

The database automatically tunes the PGA based on a PGA target.

You set:

  • SGA target size (SGA_TARGET)

  • Optional SGA maximum size (SGA_MAX_SIZE)

  • Instance PGA target size (PGA_AGGREGATE_TARGET)

n/a

Auto

Manual

The database automatically tunes the SGA based on an SGA target.

You control the PGA manually, setting the maximum work area size for each type of SQL operator.

You set:

  • SGA target size (SGA_TARGET)

  • Optional SGA maximum size (SGA_MAX_SIZE)

  • PGA work area parameters such as SORT_AREA_SIZE, HASH_AREA_SIZE, and BITMAP_MERGE_AREA_SIZE

n/a

Manual

Auto

You control the SGA manually by setting individual component sizes.

The database automatically tunes the PGA based on a PGA target.

You set:

  • Shared pool size (SHARED_POOL_SIZE)

  • Buffer cache size (DB_CACHE_SIZE)

  • Large pool size (LARGE_POOL_SIZE)

  • Java pool size (JAVA_POOL_SIZE)

  • Streams pool size (STREAMS_POOL_SIZE)

  • Instance PGA target size (PGA_AGGREGATE_TARGET)

n/a

Manual

Manual

You must manually configure SGA component sizes.

You control the PGA manually, setting the maximum work area size for each type of SQL operator.

You must manually configure SGA component sizes. You set:

  • Shared pool size (SHARED_POOL_SIZE)

  • Buffer cache size (DB_CACHE_SIZE)

  • Large pool size (LARGE_POOL_SIZE)

  • Java pool size (JAVA_POOL_SIZE)

  • Streams pool size (STREAMS_POOL_SIZE)

  • PGA work area parameters such as SORT_AREA_SIZE, HASH_AREA_SIZE, and BITMAP_MERGE_AREA_SIZE


自动内存管理参数的相关性

设置了memory_target参数后,数据库将根据数据库负荷的要求,分配给SGA和PGA。

如果忽略了memory_max_target 参数而设置了memory_target参数。那么前者将默认使用后者的值。

如果设置了memory_max_target 参数 而忽略了memory_target ,默认值为0,意味着自动内存管理被禁用


1、设置了memory_target参数时,各种内存尺寸参数间关系:

  • 如果不设置sga_target和pga_aggregate_target参数,数据库将自动调优而不需要设置SGA或PGA的最小值。
  • 如果设置了sga_target和pga_aggregate_target参数,则将其值作为SGA和PGA的最小值
  • 如果只设置了sga_target和pga_aggregate_target两者中的一个,另一个没有设置,数据库仍然可以自动调优SGA和PGA

2、不设置memory_target参数值,它默认为0,SGA和PGA的分配情况:

  • 如果既未设置sga_target也为设置pga_aggregate_target,数据库不会自动调优SGA和PGA,必须手动指定SGA的每个组件,但是PGA可以自动调优
  • 如果只设置了SGA_TARGET,则数据库自动调优SGA子组件
  • 如果只设置了PGA_AGGREGATE_TARGET,数据库自动调优PGA。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值