Zu Oracle

Bereich:
Versionsinfo:
DBA
9.1
Erstellung:
Letzte Überarbeitung:
01/2002 HW
06/2009 HW
 Als PDF Downloaden!

Dynamische Verwaltung der System Global Area (SGA)

Die System Global Area (SGA) hatte bisher immer eine feste statische Größe, die durch Initialisierungsparameter festgelegt war. Sie wurde (und wird immer noch) durch folgende Speicherbereiche bestimmt:

    * Database Buffer Cache
    * Shared Pool
    * Large Pool
    * Java Pool
    * Log Buffer
    * Dictionary Cache

Wollte man nun - sei es wegen Performance Engpässen oder bestimmten Oracle Fehlern (z. B. ORA-04135) - die Größe dieser Speicherbereiche ändern, so musste man bisher die Instanz neu durchstarten. Dies ist natürlich bei 24x7 Datenbanken die denkbar schlechteste Lösung.

Mit Oracle 9i können die wichtigsten Bereiche der SGA nun endlich dynamisch konfiguriert werden. Hierzu können Sie folgende Initialisierungsparameter

    * DB_CACHE_SIZE und DB_nK_CACHE_SIZE
    * SHARED_POOL_SIZE
    * LARGE_POOL_SIZE ( Noch nicht möglich - siehe dazu auch weiter unten ! )

mittels ALTER SYSTEM SET <name> = <new value> ändern. Es werden immer ganze Vielfache eines sog. Granules allokiert (4M bei einer SGA_MAX_SIZE < 128M oder 16M sonst).

Hinweis:

Der neue Parameter SGA_MAX_SIZE legt die maximale Gesamtgröße der SGA fest. Diese darf durch die Summe dieser Buffer sowie aller weiteren allokierten Bereiche in der SGA (fixed SGA, variable SGA, Log Buffer) nicht überschritten werden.

Beispiel:

SQL> SHOW SGA

Total System Global Area  319587480 bytes
Fixed Size                   279704 bytes
Variable Size             251658240 bytes
Database Buffers           67108864 bytes
Redo Buffers                 540672 bytes
SQL>
SQL> SELECT NAME, VALUE
  2  FROM V$PARAMETER
  3  WHERE NAME IN ('sga_max_size', 'db_cache_size', 'shared_pool_size');

NAME                           VALUE
------------------------------ --------------------
shared_pool_size                         50331648
sga_max_size                             319587480
db_cache_size                            67108864

SQL> ALTER SYSTEM SET SHARED_POOL_SIZE = 70M;

System altered.

SQL> SELECT NAME, VALUE
  2  FROM V$PARAMETER
  3  WHERE NAME IN ('sga_max_size', 'db_cache_size', 'shared_pool_size');

NAME                           VALUE
------------------------------ --------------------
shared_pool_size                         83886080
sga_max_size                             319587480
db_cache_size                            67108864

SQL> ALTER SYSTEM SET SHARED_POOL_SIZE = 200M;

ALTER SYSTEM SET SHARED_POOL_SIZE = 200M
    *
ERROR at line 1:

ORA-02097: parameter cannot be modified because
           specified value is invalid
ORA-04033: Insufficient memory to grow pool

Dieser Fehler tritt auf, da versucht worden ist, mehr Speicher zu allokieren,
als über den Parameter SGA_MAX_SIZE definiert ist.

SQL>  SHOW SGA

Total System Global Area  319587480 bytes
Fixed Size                   279704 bytes
Variable Size             251658240 bytes
Database Buffers           67108864 bytes
Redo Buffers                 540672 bytes

 

DATABASE BUFFER CACHE

Über den neuen Parameter DB_CACHE_SIZE kann die Standardgröße des
Database Buffer Cache eingestellt werden. Dieser Parameter ersetzt
DB_BLOCK_BUFFERS (wobei dieser zwar auch weiterhin verwendet, jedoch
nicht dynamisch verändert werden kann).

Die Größen der anderen Buffer Caches lassen sich über die folgenden
Parameter einstellen:

    * DB_2K_CACHE_SIZE
    * DB_4K_CACHE_SIZE
    * DB_8K_CACHE_SIZE
    * DB_16K_CACHE_SIZE
    * DB_32K_CACHE_SIZE

Hinweis:

Beim Setzen dieser Parameter muss darauf geachtet werden, dass zusätzlich zu DB_CACHE_SIZE nur diejenigen verwendet werden dürfen, die nicht der Standard Blockgröße entsprechen.

SHARED POOL

Über den Parameter SHARED_POOL_SIZE kann die Größe des Shared Pools dynamisch verändert werden. In früheren Releases war dieser Parameter statisch.

LARGE POOL

Über den Parameter LARGE_POOL_SIZE kann die Größe des Large Pools dynamisch verändert werden. In früheren Releases war dieser Parameter statisch.

Hinweis:

Derzeit ist der Parameter LARGE_POOL_SIZE (im Gegensatz zur Dokumentation) nocht nicht änderbar. Wahrscheinlich erst mit Oracle 9.2

Beispiel:

SQL> ALTER SYSTEM SET LARGE_POOL_SIZE = 10M;

ALTER SYSTEM SET LARGE_POOL_SIZE = 10M
                   *
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified

Interessante Dictionary Views

Die View V$BUFFER_CACHE gibt Auskunft über die Allokierung und Deallokierung
von Speicher innerhalb der SGA.

Über die View V$DB_CACHE_ADVICE sind die Statistiken über die Verwendung der unterschiedlichen Buffer Pools verfügbar (nur nach Setzen des Parameters
DB_CACHE_ADVICE = ON).

Suche

Kontakt

Telefon:
  089 6228 6789-0

Telefon (noch gültig):
  089 679090-40

E-Mail Verteiler Monatstipps

Bitte nehmen Sie mich in den Verteiler der monatlichen Tipps & Tricks auf.