Database Reference
In-Depth Information
SMON: The System Monitor
SMON
is the process that gets to do all of the system-level jobs. Whereas
PMON
was interested in individual processes,
SMON
takes a system-level perspective of things and is a sort of garbage collector for the database. Some of the jobs it
does include the following:
•
Cleans up temporary space
: With the advent of true temporary tablespaces, the chore of
cleaning up temporary space has lessened, but it has not gone away. For example, when
building an index, the extents allocated for the index during the creation are marked as
TEMPORARY
. If the
CREATE INDEX
session is aborted for some reason,
SMON
is responsible for
cleaning them up. Other operations create temporary extents that
SMON
would be responsible
for as well.
•
Coalesces free space
: If you are using dictionary-managed tablespaces,
SMON
is responsible
for taking extents that are free in a tablespace and contiguous with respect to each other
and coalescing them into one larger free extent. This occurs only on dictionary-managed
tablespaces with a default storage clause that has
PCTINCREASE
set to a nonzero value.
•
Recovers transactions active against unavailable files
: This is similar to its role during database
startup. Here,
SMON
recovers failed transactions that were skipped during instance/crash
recovery due to a file(s) not being available to recover. For example, the file may have been on
a disk that was unavailable or not mounted. When the file does become available,
SMON
will
recover it.
•
Performs instance recovery of a failed node in RAC
: In an Oracle RAC configuration, when a
database instance in the cluster fails (e.g., the machine the instance was executing on fails),
some other node in the cluster will open that failed instance's redo log files and perform a
recovery of all data for that failed instance.
•
Cleans up
OBJ$
:
OBJ$
is a low-level data dictionary table that contains an entry for almost every
object (table, index, trigger, view, and so on) in the database. Many times, there are entries
in here that represent deleted objects, or objects that represent “not there” objects, used in
Oracle's dependency mechanism.
SMON
is the process that removes these rows that are no
longer needed.
•
Manage undo segments
:
SMON
will perform the automatic onlining, offlining, and shrinking of
undo segments.
•
Offlines rollback segments
: When using manual rollback segment management (not
recommended, you should be using automatic undo management), it is possible for the
DBA to
offline
, or make unavailable, a rollback segment that has active transactions. It may
be possible that active transactions are using this offlined rollback segment. In this case, the
rollback is not really offlined; it is marked as “pending offline.” In the background,
SMON
will
periodically try to truly take it offline, until it succeeds.
That should give you a flavor of what
SMON
does. It does many other things, such as flush the monitoring statistics
that show up in the
DBA_TAB_MODIFICATIONS
view, flush the SCN to timestamp mapping information found in the
SMON_SCN_TIME
table, and so on. The
SMON
process can accumulate quite a lot of CPU over time, and this should be
considered normal.
SMON
periodically wakes up (or is woken up by the other background processes) to perform these
housekeeping chores.