UNDERSTANDING ORACLE PROGRAM TYPES
The first program type you should be
aware of are the Oracle background processes. These processes are
created when you start a database instance. Common examples of
Oracle background processes are log writer (lgwr), database writer
(dbw0), system monitor (smon), process monitor (pmon), recovery (reco),
and check point (ckpt), but may include others. These processes run
with the name ora_ProcessName_SID, where ProcessName is the name of
the background process and SID
is the value of ORACLE_SID. For example, the process monitor
background process for a database instance named DEV would be "ora_pmon_DEV".
The second program type you should be
aware of are the Oracle user or client processes. These processes
are created when you start a program which will work with an Oracle
database. Common examples of Oracle user processes are sqlplus, imp,
exp, and sqlldr, but may include many others. User processes are
usually named the same as the command you used to start the program.
For example, the sqlplus user process would be named "sqlplus".
The third program type you should be aware of
are the Oracle shadow or server processes. Shadow processes work
directly with the database instance to carry out the requests from
the user processes.
Shadow processes may be dedicated to a single user process or part
of a multi-threaded server (MTS) configuration. The shadow processes
are named oracleSID, where SID is the value of ORACLE_SID.
For example, any shadow process connected to the database instance
"DEV" would be named "oracleDEV".
UNDERSTANDING ORACLE MEMORY USAGE
Oracle memory usage can be broken
down into 2 basic types, private and shared. Private memory is used
only by a single process.
The largest segment of shared
memory with Oracle is usually the Shared Global Area (SGA). The SGA
is mapped into the virtual address space for all background and
shadow processes. Many programs which display memory usage, like
"top" or "ps -lf" do not distinguish between
shared and private memory and show the SGA usage in each background
and shadow process. Subsequently, it may appear as though Oracle is
using several times more memory than what is actually installed on
the system. To properly determine how much memory Oracle is using,
you must use a tool
which separates private and shared memory. One such tool is"/usr/proc/bin/pmap".
A bourne shell script (omemuse),
which relies on "/usr/proc/bin/pmap", is shown below.
Oracle memory usage. For help with invocation options, run the
script with the "h" parameter:
% omemuse h
The script will run pmap against Oracle processes that
you specify, then reporthow much and what type of memory
(private/shared) is being used. The value of private memory will be
approximately the same for all oracle background processes, since
all of these processes are just different
invocations of the same executable, $ORACLE_HOME/bin/oracle.
To see a snapshot of memory usage for all Oracle
background and shadow processes, invoke omemuse as follows:
% omemuse SB
This will display the total private memory for
all Oracle shadow processes, then the total private memory for all
Oracle background processes, followed by the total shared memory
used by all Oracle shadow and background processes, andfinally, the
grand total of all memory used by this Oracle instance.
For more information about the pmap command and
determining process memory usage, please refer to the following
articles from Sun...
http://www.itworld.com/Comp/2402/UIR980301perf
http://www.sun.com/sun-on-net/performance/vmsizing.pdf