梯はしこです。

 

今朝は黒本5章の解説を読みましたが、不明点があったため調べてみましたが、結果としては未だよくわかっておらず…汗うさぎ

 

「Oracle公式の管理者ガイドを見るにおそらくこういうことだろう」という程度ですが、いったんまとめます。

 

不明点が出たのは、Oracleのメモリーコンポーネントに関する箇所です。

 

  メモリーコンポーネント管理

Oracleはさまざまなメモリー領域を使用するため、それらを1つ1つ手作業で管理するのは大変だよね、というわけで、自動で調整してくれる機能があります。

 

黒本に載っていた自動調整機能はこの3つ。

 

  • 自動メモリー管理
  • 自動共有メモリー管理
  • 自動PGAメモリー管理
Oracleのメモリー領域はSGAとPGAに分けられます。
 
SGAの中にもいくつかのコンポーネントが分かれており、PGAについてもプロセスごとに割り当てられています。
 
 
図のように、
 
  • SGAとPGA両方を自動調整するのが自動メモリー管理
  • SGAを自動調整するのが自動共有メモリー管理
  • PGAを自動調整するのが自動PGAメモリー管理
です。
 
この自動メモリー管理と自動共有メモリー管理がややこしくて…魂が抜ける魂が抜ける魂が抜ける
 
順番に整理します。

 

  自動メモリー管理

自動メモリー管理は、SGAとPGA(各プロセスのPGAの合計)のサイズを自動的に調整します。

 

SGA内のコンポーネントたち(注意REDOログバッファは除く)や、各プロセスのPGAのサイズも1つ1つ自動調整されます。

 

注意SGAの中で、唯一REDOログバッファは自動調整の対象外となります。

 

自動メモリー管理を有効にするには、

 

初期化パラメータファイルのMEMORY_TARGET初期化パラメータにSGAとインスタンスPGAの合計サイズを設定します。

 

自動メモリー管理を無効にするには、

 

MEMORY_TARGETパラメータに何も設定しない、あるいは0を設定します。

 

自動メモリー管理が有効になっている状態で、

 

初期化パラメータファイルのSGA_TARGET初期化パラメータに0以外の値を設定した場合、

 

SGA_TARGETの値はSGA全体のメモリーサイズの最小値となります。

 

つまり、自動メモリー管理が有効になっていて、かつSGA_TARGETに0以外の数値が設定されている場合、

 

SGA全体のメモリーサイズは自動で調整されますが、SGA_TARGETのサイズを下回ることはありません。

 

  自動共有メモリー管理

続いて自動共有メモリー管理。

 

こちらはSGAの全体メモリーサイズを固定し、各コンポーネント(REDOログバッファを除く)に割り当てるサイズを自動調整します。

 

SGAの全体メモリーサイズは、

 

初期化パラメータファイルのSGA_TARGET初期化パラメータの設定値で固定となります。

 

SGA_TARGET初期化パラメータに設定した範囲内で、データベースバッファキャッシュや共有プール、Javaプール、ラージプールなどのコンポーネントサイズが調整されていきます。

 

自動共有メモリー管理を有効にするには、

 

自動メモリー管理を有効化するか、SGA_TARGET初期化パラメータにSGA全体のサイズを指定します。

 

と、黒本には書いてありました。

 

…ん?汗うさぎ

 

自動メモリー管理を有効化してSGA_TARGETに0以外の値を設定した場合、SGA全体メモリーサイズの最小値となるのでは???

 

自動メモリー管理を有効化して、かつ、SGA_TARGET初期化パラメータにSGA全体のサイズを指定する

 

あるいは

 

自動メモリー管理を無効にして、SGA_TARGET初期化パラメータにSGA全体のサイズを指定する

 

としないといけない気がするのです凝視はてなマーク

 

このあたりがずっと疑問で調べていたのですが、イマイチよくわかりませんでした…ガーン

 

Oracle公式サイトを見てみると

 

自動メモリー管理が現在有効になっている場合に、システム・グローバル領域(SGA)とインスタンスのプログラム・グローバル領域(PGA)のサイズをより直接的に制御するには、自動メモリー管理を無効化し、自動共有メモリー管理を有効化します。次の手順を実行します。

 

  1. Oracle Enterprise Manager Database Express (EM Express)の「構成」メニューから「初期化パラメータ」を選択します。

    「現行」タブを含む初期化パラメータ・ページが表示されます。

  2. 「検索」フィールドにMEMORY_TARGETと入力します。

  3. MEMORY_TARGETを選択して、「設定」をクリックします。

    初期化パラメータの設定ページが表示されます。

  4. 「値」フィールドに0と入力し、「メモリー」の「有効範囲」を指定し、「OK」をクリックします。

 

うーむ…。

 

自動メモリー管理を無効にしてから自動共有メモリー管理を有効にしているように思える…。

 

謎です…汗うさぎ

 

なお、自動共有メモリー管理を無効にするには、

 

自動メモリー管理を無効にしたうえで、SGA_TARGET初期化パラメータに何も設定しない、あるいは0を設定します。

 

この状態(自動共有メモリー管理も自動メモリー管理も無効)のことを手動共有メモリー管理と呼ぶそうです。

 

  所感

 

まだ完全に理解できていませんが、自動メモリー管理と自動共有メモリー管理について整理してみました。

 

いつも勉強すると深追いしすぎて混乱してしまい、時間ばかり使ってしまうので、ここはいったん先に進みます。

 

この先勉強を進めるうちに唐突に理解できることもあるので…今回もそれを信じます汗うさぎ

 

すっかり夜も更けてしまったので、残りの復習は明日に持ち越しです昇天