Category: Oracle
King Goddard
Posted By: Ryein C. Goddard / Bowling on Thursday, July 8th 2010 9:27:01 AM
I wanted to spend some time talking about oracle's 9i Program global area, or PGA. The PGA is used for non-shared memory the the server process uses. The PGA is one of two memory areas used by the oracle system. This area is allocated when the server process is started. This memory is allocated for each process the user creates and destroys. Memory is in turn allocated and deallocated. This memory area is only accessed by one process. Many times this area is used for shared and private SQL areas as well as bind information and runtime memory structures. There are however major differences in dedicated and shared servers. Everything from seession memory to run time memory is switched using a shared server from PGA to the SGA memory area. If you don't know what SGA is I will explain it now.The Shared Global Area (SGA) has many different memory structures such as shared pool, database buffer cache, and redo log buffer. There are other structures such as lock and latch. There are also two configurable structures that can be used within the SGA. Large pool and Java pool. A important feature to note is the ability to change parameters of the SGA while the instance is running that includes resizing the structure. So all the structures mentioned earlier can have their sizes altered when the instance is running. Although there is a limitation on the maximum size of the SGA. This value is set as a parameter in the variable name SGA_MAX_SIZE. The SGA is made up of 8 basic areas. The shared pool which consists library cache, data dictionary cache and the database buffer cache which includes the keep cache which size is assigned in the variable DB_KEEP_CACHE_SIZE in the db buffer cache there is also default which holds blocks that aren't assigned to other pools and then recycle which has a variable DB_RECYCLE_CACHE_SIZE and this buffer holds information that is soon to be deallocated. Now we have the last three areas the large pool which is controlled by its variable LARGE_POOL_SIZE then the Java pool which is controlled by JAVA_POOL_SIZE and lastly the redo log buffer which is controlled by LOG_BUFFER.
This is just a short summary and I will add more to it as I learn more.