Oracle8i Supplied Packages Reference Release 8.1.5 A68001-01 |
|
DBMS_SHARED_POOL
provides access to the shared pool, which is the shared memory area where cursors and PL/SQL objects are stored. DBMS_SHARED_POOL
enables you to display the sizes of objects in the shared pool, and mark them for keeping or unkeeping in order to reduce memory fragmentation.
To create DBMS_SHARED_POOL
, run the DBMSPOOL
.SQL
script. The PRVTPOOL
.PLB
script is automatically executed after DBMSPOOL
.SQL
runs. These scripts are not run by CATPROC
.SQL
.
The procedures provided here may be useful when loading large PL/SQL objects. When large PL/SQL objects are loaded, users response time is affected because of the large number of smaller objects that need to be aged out from the shared pool to make room (due to memory fragmentation). In some cases, there may be insufficient memory to load the large objects.
DBMS_SHARED_POOL
is also useful for frequently executed triggers. You may want to keep compiled triggers on frequently used tables in the shared pool. Additionally, DBMS_SHARED_POOL
supports sequences. Sequence numbers are lost when a sequence is aged out of the shared pool. DBMS_SHARED_POOL
is useful for keeping sequences in the shared pool and thus preventing the loss of sequence numbers.
Subprogram | Description |
---|---|
SIZES procedure |
Shows objects in the shared pool that are larger than the specified size |
KEEP procedure |
Keeps an object in the shared pool |
UNKEEP procedure |
Unkeeps the named object |
ABORTED_REQUEST_THRESHOLD procedure |
Sets the aborted request threshold for the shared pool |
This procedure shows objects in the shared_pool
that are larger than the specified size. The name of the object is also given, which can be used as an argument to either the KEEP
or UNKEEP
calls below.
DBMS_SHARED_POOL.SIZES ( minsize NUMBER);
Parameter | Description |
---|---|
minsize |
Size, in kilobytes, over which an object must be occupying in the shared pool, in order for it to be displayed. |
Issue the SQLDBA or SQLPLUS 'SET
SERVEROUTPUT
ON
SIZE
XXXXX'
command prior to using this procedure so that the results are displayed.
This procedure keeps an object in the shared pool. Once an object has been kept in the shared pool, it is not subject to aging out of the pool. This may be useful for certain semi-frequently used large objects, because when large objects are brought into the shared pool, a larger number of other objects (much more than the size of the object being brought in) may need to be aged out in order to create a contiguous area large enough.
DBMS_SHARED_POOL.KEEP ( name VARCHAR2, flag CHAR DEFAULT 'P');
An exception is raised if the named object cannot be found.
There are two kinds of objects:
For example:
DBMS_SHARED_POOL.KEEP('scott.hispackage')
This keeps package HISPACKAGE
, owned by SCOTT
. The names for PL/SQL objects follow SQL rules for naming objects (i.e., delimited identifiers, multi-byte names, etc. are allowed). A cursor can be keeped by DBMS_SHARED_POOL
.KEEP
('0034CDFF
, 20348871
'). The complete hexadecimal address must be in the first 8 characters.
This procedure unkeeps the named object.
DBMS_SHARED_POOL.UNKEEP ( name VARCHAR2, flag CHAR DEFAULT 'P');
Parameter | Description |
---|---|
name |
Name of the object to unkeep. See description of the |
flag |
See description of the flag parameter for the |
An exception is raised if the named object cannot be found.
This procedure sets the aborted request threshold for the shared pool.
DBMS_SHARED_POOL.ABORTED_REQUEST_THRESHOLD ( threshold_size NUMBER);
An exception is raised if the threshold is not in the valid range.
Usually, if a request cannot be satisfied on the free list, then the RDBMS tries to reclaim memory by freeing objects from the LRU list and checking periodically to see if the request can be fulfilled. After finishing this step, the RDBMS has performed a near equivalent of an 'ALTER
SYSTEM
FLUSH
SHARED_POOL
'.
Because this impacts all users on the system, this procedure "localizes" the impact to the process failing to find a piece of shared pool memory of size greater than thresh_hold
size. This user gets the 'out of memory' error without attempting to search the LRU list.