Ein hilfreicher Speicherbefehl, mit dem Sie den Oracle SGA überwachen können, ist der Befehl ipcs. Der Befehl ipcs zeigt die Größe jedes gemeinsam genutzten Speichersegments für den SGA an. Wenn nicht genügend Speicher vorhanden ist, damit der gesamte SGA in einen zusammenhängenden Speicherbereich passt, wird der SGA in nicht zusammenhängenden Speichersegmenten erstellt. Im Falle eines sofortigen Absturzes wird der Speicher möglicherweise nicht freigegeben. Beachten Sie in diesem Fall, dass der Befehl ipcrm die Segmente entfernt (ipcrm –m für Speichersegmente und ipcrm –s für Semaphor-Segmente). Verwenden Sie ipcs -b unter Solaris und ipcs –a unter Linux, HPUX und AIX.
Im vorhergehenden Beispiel ist der SGA in drei nicht zusammenhängenden Segmenten aufgebaut (die den 100M + SGA bilden). Die Instanz wird dann heruntergefahren und mit einem kleineren SGA gestartet (der SGA besteht also aus zusammenhängenden Speicherteilen). Nachdem der SGA auf 70M abgesenkt wurde, gebe ich erneut den Befehl ipcs aus:
Das Einpassen des gesamten SGA in ein einzelnes gemeinsam genutztes Speichersegment ist im Allgemeinen vorzuziehen, da der Overhead, der erforderlich sein kann, um mehr als ein Segment zu verfolgen, und die Zeit, die erforderlich ist, um zwischen diesen Segmenten hin und her zu wechseln. Sie können die maximale Größe eines einzelnen gemeinsam genutzten Speichersegments erhöhen, indem Sie die Einstellung SHMMAX in der Datei /etc/system (oder /etc/sysctl.conf je nach Version). Weitere Informationen zu Ihrer Plattform finden Sie in der Oracle-Installationsdokumentation. Unter Solaris 10 wurde die Einstellung der Shared Memory-Parameter in die Ressourcensteuerung verschoben.Wenn Sie also die Datei /etc/system ändern, werden alle vorgenommenen Änderungen ignoriert. Wenn Sie Hugepages konfigurieren, wird der Speicher aus einem Pool gezogen und Semaphore werden nicht verwendet. Wenn Sie also MEMORY_TARGET , können Sie Hugepages nicht verwenden.
TIPP
Verwenden Sie den Befehl ipcs, um festzustellen, ob Ihr SGA aus mehreren nicht zusammenhängenden Speicherteilen besteht. Ein Datenbankabsturz kann dazu führen, dass dies problematisch ist, indem der Speicher nicht freigegeben wird. Verwenden Sie den Befehl ipcrm (nur, wenn die SGA-Teile nach einem Datenbankabsturz nicht freigegeben werden), um die SGA-Teile aus dem Speicher zu entfernen. Geben Sie den Befehl ipcrm nicht mit einer laufenden Datenbank aus.