初めましての方もそうでない方も宜しくお願い致します。
レック・テクノロジー・コンサルティングのエンジニア「佐々木」にございます。
前回までで、Oracleより情報を確認する際の対象を説明致しました。
続きまして、Oracleが使用するメモリ領域につきまして説明させて頂きます。
なお今回はSGAについて、次回はPGAについての予定です。
以下、今回の内容となります。
・SGAとは?
・SGA関連のパラメータについて
・SGAの構成要素は?
・自動管理について
SGAとは?
SGA (System Global Area)は、
Oracleデータベース(以下、Oracle)起動時に確保されるメモリ領域です。
SGAは、複数のユーザからの処理要求を効率よく実行するために共有されるメモリ領域であり、
いくつかの領域で構成されています。
SGA関連のパラメータについて
SGAの設定に関するパラメータについて説明致します。
なお、SGAを構成する各領域のサイズを指定するパラメータについては、別項にて記述致します。
・SGA_MAX_SIZE
SGAの最大サイズを指定します。
・SGA_TARGET
このパラメータが指定されている場合、SGAの一部のメモリ・サイズが自動的に管理されます。
※SGAの自動管理については後述します。
・LOCK_SGA
SGA全体を物理メモリーにロックします。
・PRE_PAGE_SGA
インスタンスの起動時にSGA全体をメモリーに読み込むかどうかを指定します。
SGAの構成要素は?
ここではSGAを構成する各領域と、そのサイズを指定するパラメータについて説明します。
まず、SGAを構成する要素を図にすると以下のようになります。
では、各要素の詳細を説明します。
・データベース・バッファ・キャッシュ
デフォルトのブロック・サイズであればDB_CACHE_SIZE、
デフォルト以外のブロック・サイズはDB_nK_CACHE_SIZEパラメータでサイズ指定します。
nには2、4、8、16、32のうち、DB_CACHE_SIZEに指定したサイズ以外が指定可能です。
ブロックとは、OracleにおけるI/Oの最小単位です。
データ・ファイルおよびデータベース・バッファ・キャッシュは、指定したデータ・ブロック・サイズで
管理されています。
なお、データベース・バッファ・キャッシュは、データ・ファイルから読み込んだデータ・ブロックを一旦コピーしておくメモリ領域です。次回以降、同様のデータを問合せた場合に、データベース・バッファ・キャッシュから読み出せる可能性があり、問合せの高速化が期待できます。
・REDOログ・バッファ
LOG_BUFFERパラメータでサイズ指定します。
REDO ログ・バッファは、データベースに加えられた変更履歴情報を保持します。
(INSERT/UPDATE/DELETE/CREATE/ALTER またはDROP)
REDOログ・バッファの情報は、アクティブなREDO ログ・ファイル(またはREDO ログ・ファイルのグループ)に書き込まれます。
・共有プール
SHARED_POOL_SIZEパラメータでサイズ指定します。
共有プール内の主な構造として、ライブラリ・キャッシュとディクショナリ・キャッシュがあります。
ライブラリ・キャッシュは、最近実行されたSQLやPL/SQLの解析情報を格納しています。
同様の文が実行された場合、ここに格納された情報が再利用されるため、解析に要する時間の短縮が期待できます。
ディクショナリ・キャッシュには、解析の際に参照されたデータ・ディクショナリの情報が格納されます。
次回以降の解析時において、同様の情報が必要になった際にここから再利用します。
・Java プール
JAVA_POOL_SIZEパラメータでサイズ指定します。
Java プールのメモリは、サーバ・メモリ内でJVM に含まれるセッション固有のJavaコードとデータすべてに使用されます。
・ラージ・プール
LARGE_POOL_SIZEパラメータでサイズ指定します。
ラージ・プールは、大量のメモリを割り当てる場合に設定されるオプションのメモリ領域です。
自動管理について
SGA_TARGETを0以外の値に設定した場合、一部のメモリ・サイズを必要に応じてOracleが自動的に変更します。これを自動管理機能と呼称します。
自動管理の対象を図で表すと下記のようになります。
■自動管理機能でサイズが管理される領域
・バッファ・キャッシュ(DB_CACHE_SIZE)・共有プール(SHARED_POOL_SIZE)
・ラージ・プール(LARGE_POOL_SIZE)
・Java プール(JAVA_POOL_SIZE)
・Streams プール(STREAMS_POOL_SIZE)
SGA_TARGETを0以外の値にし、上記個々のパラメータに0を指定した場合、各領域のサイズは完全にOracle任せとなります。もし個々のパラメータに値を設定した場合は、その値を最低値とし、SGA_TARGETの範囲内で自動管理されます。
11gからは更にこの自動管理機能が強化されてMEMORY_TARGETというパラメータが登場していますが、こちらについては以前の回をご覧ください。
まとめ
・SGAとは、複数のユーザで共有されるメモリ領域です。
・SGAは主にデータベース・バッファ・キャッシュ/共有プール/Java プールから構成されます(ラージ・プールはオプションの設定です)。
・SGA_TARGETを0以外の値に設定することで、SGAの自動管理が有効になります。
・更に11gからはSGA、PGAの自動管理パラメータとしてMEMORY_TARGETがあります。
最後に
Oracleのメモリ構造のうち、SGAについて概要を説明させて頂きました。
次回はOracleが使用するメモリ領域(PGA)について説明させて頂きます。
以上、宜しくお願い致します。