Oracle Database 9i以前では、初期化パラメータでSGAの各コンポーネントのサイズを個別に設定していた。

データベースサーバにSGAのトータルサイズを指定しておくことで、負荷状況に合わせて、各コンポーネントのサイズを自動的に調整する機能が追加された。

それが自動共有メモリ管理と呼ぶ機能。

PGAも同様にトータルサイズを設定しておくことで、ユーザの処理内容に合わせて自動的に配分されるようになる。

自動PGAメモリ管理と呼ぶ。

11gに新たに実装されたのが自動メモリ管理で、SGAとインスタンスPGAをまとめて自動管理できるようになった。

インスタンスPGAとは、インスタンスに連結されたすべてのバックグラウンドプロセスおよびサーバプロセスに対して、割り当てられた個別のPGAの合計です。

■メモリコンポーネントの管理方法の設定

メモリコンポーネントの管理方法は、下記の方法がある。

・自動メモリ管理(AMM:Automatic Memory Management)

・自動共有メモリ管理(ASMM:Automatic Shared Memory Management)+自動PGAメモリ管理

・手動共有メモリ管理+自動PGAメモリ管理

■自動メモリ管理(AMM)

Oracleソフトウェアの基本インストールを行って、デフォルトのデータベースを作成すると、自動メモリ管理(AMM)が有効になる。

この場合、SGAとPGAに割り当てられるメモリサイズは、自動的に次の初期化パラメータによって、指定されたターゲットサイズの範囲内で調整される。

また、メモリ要件の変化に合わせて、SGAとインスタンスPGAとの間でメモリの再配分が行われる。

▼自動メモリ管理の初期化パラメータ

パラメータ名説明
MEMORY_TARGETOracleデータベースで使用可能なメモリサイズ(ターゲットサイズ)
MEMORY_MAX_TARGETOracleデータベースで使用可能なメモリの最大サイズ(静的)

MEMORY_TARGET初期化パラメータの値は、動的に変更可能であるが、MEMORY_MAX_TARGET初期化パラメータで設定したサイズを超えることはできません。MEMORY_MAX_TARGETパラメータは静的パラメータです。

自動メモリ管理(AMM)の場合に、SGA_TARGET初期化パラメータ(SGAのターゲットサイズ)、およびPGA_AGGREGATE_TARGET初期化パラメータ(インスタンスPGAのターゲットサイズ)に値を設定すると、その値は、SGAまたはインスタンスPGAのサイズの最小値として機能する。

また、SGAの各コンポーネントサイズを設定する初期化パラメータ(DB_CASHE_SIZEなど)に値を設定すると、その値は、各コンポーネントのサイズの最小値として機能する。

○自動メモリ管理の設定方法

MEMORY_MAX_TARGETは静的パラメータであり、SCOPE=SPFILEを指定する必要がある。

SCOPE=SPFILEを指定すると、サーバパラメータファイル内の値のみが設定され、実行中のインスタンスに対する値は設定されません。変更を反映するにはインスタンスを再起動します。

▼MEMORY_MAX_TARGET初期化パラメータの設定

ALTER SYSTEM SET MEMORY_MAX_TARGET = n[K|M|G] SCOPE = SPFILE;

MEMORY_TARGETは動的パラメータのため、MEMORY_MAX_TARGETの値を超えない範囲で、0以外の値に動的に変更できる。

▼MEMORY_TARGET初期化パラメータの設定

ALTER SYSTEM SET MEMORY_TARGET = n[K|M|G];

または、

ALTER SYSTEM SET MEMORY_TARGET = n[K|M|G][SCOPE={MEMORY|SPFILE|BOTH}];

■自動メモリ管理(ASMM)+自動PGAメモリ管理

SGAとインスタンスPGAのサイズを個別に制御したい場合は、自動共有メモリ管理(ASMM:Automatic Shared Memory Management)を使用する。自動共有メモリ管理を有効にすると、自動PGAメモリ管理が暗黙的に有効になる。

自動共有メモリ管理では、SGAの各コンポーネントのサイズとインスタンスPGAのサイズが個別に、データベースサーバによる自動管理となる。

SGAとインスタンスPGAの間でのメモリの再配分は行われない。

SGAとインスタンスPGAのサイズは、次のパラメータで個別に設定する。

▼自動共有メモリ管理と自動PGAメモリ管理の初期化パラメータ

パラメータ名説明
SGA_TARGETSGAのターゲットサイズ
SGA_MAX_SIZESGAの最大サイズ(静的)
PGA_AGGREGATE_TARGETインスタンスPGAのターゲットサイズ

SGA_TARGET初期化パラメータは動的に変更可能であるが、SGA_MAX_SIZE初期化パラメータに設定したサイズを超えることはできない。SGA_MAX_SIZEは静的パラメータである。PGA_AGGREGATE_TARGET初期化パラメータは動的に変更可能です。

SGA_TARGETが指定さている場合、SGA内の次のメモリコンポーネントのサイズは自動的に設定されます。

・データベース・バッファ・キャッシュ(DB_CACHE_SIZE)

・共有プール(SHARED_POOL_SIZE)

・Javaプール(JAVA_POOL_SIZE)

・Streamsプール(STREAMS_POOL_SIZE)

・ラージ・プール(LARGE_POOL_SIZE)

これらのメモリコンポーネントに個別に指定されているサイズが0ではなく、正数である場合、その値は各コンポーネントの最小値として使用される。

REDOログファイルや固定SGA、他の内部割当に使用されるメモリコンポーネントなどは、自動共有メモリ管理の影響を受けません。ただし、これらのコンポーネントに割り当てられたメモリは、自動共有メモリ管理で、SGA_TARGETに設定されている総量から差し引かれる。

○自動メモリ管理の設定方法

ALTER SYSTEM SET MEMORY_TARGET = 0;

または、

ALTER SYSTEM SET MEMORY_TARGET = [SCOPE = {MEMORY|SPFILE|BOTH}];

その上で、SGA_MAX_SIZEを設定する。SGA_MAX_SIZEは静的パラメータのため、SCOPE = SPFILEを指定する必要がある。反映するにはインスタンスを再起動する。

▼SGA_MAX_SIZEの設定

ALTER SYSTEM SET SGA_MAX_SIZE = n[K|M|G] SCOPE = SPFILE;

SGA_TARGETは動的パラメータのため、SGA_MAX_SIZEの値を超えない範囲で、0以外の値に動的に変更できる。

▼SGA_TARGETの設定

ALTER SYSTEM SET SGA_TARGET = n[K|M|G];

または、

ALTER SYSTEM SET SGA_TARGET = n[K|M|G] [SCOPE = {MEMORY|SPFILE|BOTH}];

■手動共有メモリ管理+自動PGAメモリ管理

自動メモリ管理と自動メモリ管理を無効にすると手動共有メモリ管理になり、また、自動PGAメモリ管理が暗黙的に有効になる。この場合は、データベース管理者がデータベース・バッファ・キャッシュや共有プールなどのSGAの各コンポーネントのサイズをパラメータを使用して個別に指定する必要がある。

○手動共有メモリ管理の設定方法

手動共有メモリ管理を行うには、最初にMEMORY_TARGETおよびSGA_TARGETパラメータに0を設定して、自動メモリ管理と自動共有メモリ管理を無効化します。

▼自動共有メモリ管理の無効化

ALTER SYSTEM SET MEMORY_TARGET = 0;

または、

ALTER SYSTEM SET MEMORY_TARGET = 0 [SCOPE = {MEMORY|SPFILE|BOTH}];

○手動共有メモリ管理の設定方法

手動共有メモリ管理を行うには、最初にMEMORY_TARGETおよびSGA_TARGETパラメータに0を設定して、自動メモリ管理と自動共有メモリ管理を無効化する。

▼自動メモリ管理の無効化

ALTER SYSTEM SET MEMORY_TARGET = 0;

または、

ALTER SYSTEM SET MEMORY_TARGET = 0 [SCOPE ={MEMORY|SPFILE|BOTH}];

▼自動共有メモリ管理の無効化

ALTER SYSTEM SET SGA_TARGET = 0;

または、

ALTER SYSTEM SET_TARGET = [SCOPE = {MEMORY|SPFILE|BOTH}];

その上で、各コンポーネントのサイズを個別に設定する。REDOログバッファ以外のコンポーネントは動的に変更できる。