Mittwoch, 18. Juli 2012

Automatic Memory Management in 11g

In Oracle 11g wurde das Automatic Memory Management (AMM) eingeführt, dass sowohl die SGA als auch die PGA dynamisch verwaltet. Mit der Einführung wurden die beiden neuen Parameter MEMORY_MAX_TARGET und MEMORY_TARGET geschaffen.
Immer wieder stelle ich fest, dass Datenbanken unvorteilhaft konfiguriert werden. Dies ist vor allem auf die Dokumente von Oracle zurückzuführen, die hier nicht alle Aspekte abdecken. Um Automatic Memory Management zu nutzen, müssen die folgenden Parameter gesetzt werden:
  • MEMORY_TARGET: Definiert die Obergrenze des Dynamisch verwalteten Speichers. SGA + PGA = MEMORY_TARGET.
  • MEMORY_MAX_TARGET: Dieser Parameter ist optional. Wenn er auf 0 steht, wird bei starten der Instanz der Parameter auf den selben Wert wie MEMORY_TARGET gesetzt.
  • SGA_TARGET: Laut Oracle Note 443746.1 soll dieser Parameter auf 0 gesetzt werden. In der Theorie stimme ich zu, in der Praxis nicht. Mehr dazu im nächsten Absatz.
  • PGA_AGGREGATE_TARGET: Das Selbe wie für Parameter SGA_TARGET.
In der Oracle-Dokumentation wird beschrieben, dass bei SGA_TARGET=0, Autotuning für DEFERRED Modus deaktiviert ist. Dies führt zu ORA-4031 ("Out of Memory") Fehlern. Ähnliches gilt für den Parameter PGA_AGGREGATE_TARGET. Hier kann es zu Fehler ORA-4030 kommen wenn der Parameter auf Wert 0 gesetzt wurde.
Mein Vorschlag ist deshalb die Parameter SGA_TARGET und PGA_AGGREAGATE_TARGET auf einen kleinen Wert zu setzen. Dieser Wert ist dann jeweils das Minimum an zugewiesenem Speicher und erlaubt Oracle trotzdem frei mit dem Speicher zu haushalten.
Als vollständiges Beispiel hier:
SQL> show parameter target
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
archive_lag_target                   integer                           0
db_flashback_retention_target        integer                           1440
fast_start_io_target                 integer                           0
fast_start_mttr_target               integer                           0
memory_max_target                    big integer                       12G
memory_target                        big integer                       12G
parallel_servers_target              integer                           64
pga_aggregate_target                 big integer                       500M
sga_target                           big integer                       2G

That's IT