Oracle SGA
The Oracle
system
global area (SGA) is just shared memory structures that are created at
instance startup, hold information about the instance and control its
behavior.
Simply
stated, the system global area (SGA) is just shared memory structures
that are created at instance startup, hold information about the
instance and control its behavior. The following figure gives a brief
synopsis of the particular components of the SGA. Note, that the
blue components are managed by AMM,
whereas the red component is manually
managed.

What
can be seen from this figure, is that there are
many options available to setup the SGA and without a complete
understanding of what the applications are doing in the background,
the ability to guess the appropriate amount of memory to give each of
these individual components is not always optimal. AMM can solve this
complex configuration part - but gives the possibility to size an
extra, manually sized buffer cache for objects within the extra
tablespace. In our example, we used 16K, but Oracle offers additional blocksizes of 2K, 4k, 8k, 16k and 32K.
Components of the SGA
|
SGA Component |
Size controlled by |
Areas of Influence |
Description |
|
Shared
Pool |
SHARED_POOL_SIZE |
Library Cache
- Shared SQL areas
- Private SQL areas
- PL/SQL procedures
and packages
- Various control
structures |
Oracle needs to allocate & deallocate memory as
SQL or procedural code is executed based on the individual needs
of users' sessions and in accordance to the LRU algorithm. |
|
Dictionary Cache
- Row cache
- Library cache |
Highly accessed memory structures that provide
information on object structures to SQL statements being parsed. |
|
Java
Pool |
JAVA_POOL_SIZE |
- Run state
- Methods
- Classes
- Session code
- Data in JVM |
Memory available for the Java memory manager to
use for all things Java. |
|
Streams
Pool |
STREAMS_POOL_SIZE |
- Stream activity
|
New to Oracle 10g, memory available for stream
processing. |
|
Redo Log Buffer |
LOG_BUFFER |
- Redo entries
|
Holds changes made to data and allows for the
reconstruction of data in the case of failure. |
|
Database
Buffer
Cache |
DB_2K_CACHE_SIZE DB_4K_CACHE_SIZE
DB_8K_CACHE_SIZE DB_16K_CACHE_SIZE DB_32K_CACHE_SIZE
DB_KEEP_CACHE_SIZE DB_RECYCLE_CACHE_SIZE |
- Write list
- LRU list |
Holds copies of data requested by SQL and
reduces requests to disk by having data in memory. You may have
many different buffer caches that help segregate on usage patterns. |
|
Large
Pool |
LARGE_POOL_SIZE |
- Shared server
- Oracle XA
- I/O server
processes
- Backup & restore |
For large memory allocations.
|
You
can look at the size of your SGA by looking at the initialization
parameters that control its size. Here is a simple query and its
output.
Automatically managed SGA
There
is really nothing to switching into automatic shared memory tuning.
You only need to set the SGA_TARGET parameter in the INIT.ORA.
# Using Automatic SGA
Management
sga_target = 300M
sga_max_size = 400M
shared_pool_size = 0
java_pool_size = 0
large_pool_size = 0
Multiple Block Sizes
Oracle supports
multiple block sizes as follows.
| DB_BLOCK_SIZE
|
It has a
standard block size, as set by the DB_BLOCK_SIZE
initialization parameter. The standard block size is used for the
SYSTEM tablespace and most other tablespaces.
The most commonly used block size should be
picked as the standard block size. In many cases, this is the only
block size that you need to specify. Typically, DB_BLOCK_SIZE is
set to either 4K or 8K. If not specified, the default data block
size is operating system specific, and is generally adequate.
The block size cannot be changed after database creation, except
by re-creating the database. If a database's block size is
different from the operating system block size, make the database
block size a multiple of the operating system's block size.
For example, if your operating system's block size is 2K (2048
bytes), the following setting for the DB_BLOCK_SIZE initialization
parameter is valid:
DB_BLOCK_SIZE =
4096 |
Non Standard
Block Sizes |
Additionally up
to 4 nonstandard block sizes. Nonstandard block sizes are
specified when creating tablespaces. Multiple block size support
allows for the transporting of tablespaces with unlike block sizes
between databases.
Tablespaces of non-standard
block sizes can be created using the CREATE TABLESPACE statement
and specifying the BLOCKSIZE clause. These non-standard
block sizes can have any power-of-two value between 2K and 32K:
specifically, 2K, 4K, 8K, 16K or 32K. Platform-specific
restrictions regarding the maximum block size apply, so some of
these sizes may not be allowed on some platforms.
To use non-standard block
sizes, you must configure sub-caches within the buffer cache area
of the SGA memory for all of the non-standard block sizes that you
intend to use |
Configure sub-caches for non-standard
block sizes
If you intend to use multiple
block sizes in your database, you must have the DB_CACHE_SIZE
and at least one DB_nK_CACHE_SIZE parameter set. Oracle assigns
an appropriate default value to the DB_CACHE_SIZE parameter, but the
DB_nK_CACHE_SIZE parameters default to 0, and no additional block size
caches are configured.

The DB_CACHE_SIZE
initialization parameter replaces the DB_BLOCK_BUFFERS
initialization parameter that was used in previous releases. The
DB_CACHE_SIZE parameter specifies the size of the cache of
standard block size buffers, where the standard block size is
specified by DB_BLOCK_SIZE. However, this have only be done
if you don't use AMM.
The sizes and numbers of
non-standard block size buffers are specified by the following
initialization parameters:
DB_2K_CACHE_SIZE
DB_4K_CACHE_SIZE
DB_8K_CACHE_SIZE
DB_16K_CACHE_SIZE
DB_32K_CACHE_SIZE
Each parameter specifies the
size of the buffer cache for the corresponding block size.
INIT.ORA example
DB_BLOCK_SIZE = 4096
DB_CACHE_SIZE = 12M
DB_2K_CACHE_SIZE = 8M
DB_8K_CACHE_SIZE = 4M
In the above example, the
parameters specify that the standard block size of the database will
be 4K. The size of the cache of standard block size buffers will be
12M. Additionally, 2K and 8K caches will be configured with sizes of
8M and 4M respectively.
Note:
These parameters cannot be used
to size the cache for the standard block size. For example, if the
value of DB_BLOCK_SIZE is 2K, it is illegal to set DB_2K_CACHE_SIZE.
The size of the cache for the standard block size is always
determined from the value of DB_CACHE_SIZE.
Example
Database 10.2.0.3, Standard Blocksize with 4K, automatically
managed SGA (AMM) but with extra tablespace with 16K Blocksize for
very wide tables.
Setup INIT.ORA
### Basic Configuration
Parameters
### ------------------------------
compatible
= 10.2.0
db_block_size
= 4096
### Database Buffer Cache, I/O
### --------------------------
# The Parameter SGA_TARGET enables Automatic Shared Memory
Management
# Using Automatic SGA Management
sga_target
= 300M
sga_max_size
= 400M
shared_pool_size
= 0
java_pool_size
= 0
large_pool_size
= 0
db_16k_cache_size
= 50M
Creating
the tablespace with nonstandard block sizes
CREATE TABLESPACE
wide_tab
DATAFILE '/u01/oracle/db/AKI1/tab/wide_tab.dbf' SIZE
50M REUSE
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 512K
SEGMENT SPACE MANAGEMENT AUTO
BLOCKSIZE 16K
PERMANENT
ONLINE;
Check Sizes in Oracle Enterprise Manager

You can see, the manually configured 16K
buffer cache and all other automatically sized components.
|