Applies to:

Database Management Software Oracle Server - Enterprise Edition - Version: to - Release: 11.1 to 11.2
Information in this document applies to any platform. 


Automatic memory management is introduced into Oracle 11g. This can be configured using a target memory size initialization parameter MEMORY_TARGET and a maximum memory size initialization parameter MEMORY_MAX_TARGET. Oracle Database then tunes to MEMORY_TARGET size, by distrubuting memory as needed between the system global area (SGA) and the instance program global area (instance PGA).

Scope and Application

DBA's with prior knowledge of 9i and 10g memory management.

If  MEMORY_TARGET is set to a non-zero value.

  • If  SGA_TARGET and PGA_AGGREGATE_TARGET are set, they will be considered the minimum values for the sizes of SGA and the PGA respectively. MEMORY_TARGET can take values from SGA_TARGET + PGA_AGGREGATE_TARGET to MEMORY_MAX_TARGET.  
  • If SGA_TARGET is set and PGA_AGGREGATE_TARGET is not set, we will still auto-tune both parameters. PGA_AGGREGATE_TARGET will be initialized to a value of (MEMORY_TARGET-SGA_TARGET). 
  • If PGA_AGGREGATE_TARGET is set and SGA_TARGET is not set, we will still auto-tune both parameters. SGA_TARGET will be initialized to a value of min(MEMORY_TARGET-PGA_AGGREGATE_TARGET, SGA_MAX_SIZE (if set by the user)) and will auto-tune subcomps. 

  • If neither is set, they will be auto-tuned without any minimum or default values. We will have a policy of distributing the total memory set by memory_target parameter in a fixed ratio to the the SGA and PGA during initialization. The policy is to give 60% for sga and 40% for PGA at startup. 
If MEMORY_TARGET is not set or set to set to 0 explicitly (default value is 0 for 11g): 

  • If SGA_TARGET is set we will only auto-tune the sizes of the sub-components of the SGA. PGA will be autotuned independent of whether it is explicitly set or not. Though the whole SGA(SGA_TARGET) and the PGA(PGA_AGGREGATE_TARGET) will not be auto-tuned, i.e., will not grow or shrink automatically. 

  • If neither SGA_TARGET nor PGA_AGGREGATE_TARGET is set, we will follow the same policy as we have today; PGA will be auto-tuned and the SGA will not be auto-tuned and parameters for some of the sub-components will have to be set explicitly (for SGA_TARGET).

  • If only MEMORY_MAX_TARGET is set, MEMORY_TARGET will default to 0 and we will not auto tune sga and pga. It will default to 10gR2 behavior within sga and pga. 

  • If sga_max_size is not user set, we will internally set it to MEMORY_MAX_TARGET. 
In a text initialization parameter file, if you omit the line for MEMORY_MAX_TARGET and include a value for MEMORY_TARGET, the database automatically sets MEMORY_MAX_TARGET to the value of MEMORY_TARGET. If you omit the line for MEMORY_TARGET and include a value for MEMORY_MAX_TARGET, the MEMORY_TARGET parameter defaults to zero. After startup, you can then dynamically change MEMORY_TARGET to a non-zero value, provided that it does not exceed the value of MEMORY_MAX_TARGET.

If you wish to monitor the decisions made by Automatic Memory Management following views can be useful
  • V$MEMORY_DYNAMIC_COMPONENTS has the current status of all memory components
  • V$MEMORY_RESIZE_OPS has a circular history buffer of the last 800 SGA resize requests
Please share your views about this article. 


  1. Replies
    1. Ramesh, Thanks for you comment. Please keep on visiting my blog.

  2. thanks, Good document,

    1. What an explanation! Very clear and placed in such a way that every parameter is speaking in its tone and with default n allocated values...

      Keep writing such a vivid columns on RAC and DG too.

      Thanks and Regards
      Mohammad Ahsan

  3. one the best blog i have gone through. Thanks and appreciate the your efforts .


  4. I was facing this issue: ORA-00838: Specified value of MEMORY_TARGET is too small, needs to be at least 2064M
    But after reading this article all cleared. Thanks for explaining so clearly.