SGA = System Global Area ( shared memory structures );  // maintains control information for oracle instance

Oracle Instance = SGA + Oracle Processes ( includes background process, server process ... );

for each instance in database

   allocate only one ( SGA );

SGA size = sum (    DB_CACHE_SIZE, // caching disk blocks

                               LOG_BUFFER, // allocate for redo log buffer

                               SHARED_POOL_BUFFER, // allocate SQL & PL/SQL execution

                               LARGE_POOL_SIZE, // large pool buffer

                               JAVA_POOL_SIZE // Java Object and Java execution memory

                             );

while ( allocate SGA || delocate SGA)

   assign by Granules ( size );

sizeof( Granules ) = depend on ( SGA_size );

SGA Used Ratio = used Granules / total Granules;

SGA_TARGET = set only at startup(); // automatically allocate free memory

SGA_TARGET.allocate flexibly ( shared pool, Java pool, large pool, buffer cache, streams pool);

manual manage SGA components = 

   Keep/Recycle buffer caches ( DB_KEEP_CACHE_SIZE and DB_RECYCLE_CACHE_SIZE );

   Additional buffer caches for non-standard block sizes ( DB_nK_CACHE_SIZEn = {2, 4, 8, 16, 32});

   where

      amount memory for auto adjustment = ( SGA_TARGET - manual managed memory);

if ( SGA_TARGET > SGA_MAX_SIZE )

   SGA_MAX_SIZE = SGA_TARGET;

if ( shutdown instance )

   auto tuned memory distributed sizes -> SPFILE;

else

   new memory distributed learning;

when ( restart instance )

  SPFILE -> memory ditributed sizes;

for each PGA for one instance

   PGA -> ( ORACLE PROCESS || SERVER PROCESS || BACKGROUND PROCESS );