梯はしこです。
今朝は黒本5章の解説を読みましたが、不明点があったため調べてみましたが、結果としては未だよくわかっておらず…
「Oracle公式の管理者ガイドを見るにおそらくこういうことだろう」という程度ですが、いったんまとめます。
不明点が出たのは、Oracleのメモリーコンポーネントに関する箇所です。
メモリーコンポーネント管理
Oracleはさまざまなメモリー領域を使用するため、それらを1つ1つ手作業で管理するのは大変だよね、というわけで、自動で調整してくれる機能があります。
黒本に載っていた自動調整機能はこの3つ。
- 自動メモリー管理
- 自動共有メモリー管理
- 自動PGAメモリー管理
- SGAとPGA両方を自動調整するのが自動メモリー管理
- SGAを自動調整するのが自動共有メモリー管理
- PGAを自動調整するのが自動PGAメモリー管理
![魂が抜ける](https://stat100.ameba.jp/blog/ucs/img/char/char4/627.png)
![魂が抜ける](https://stat100.ameba.jp/blog/ucs/img/char/char4/627.png)
![魂が抜ける](https://stat100.ameba.jp/blog/ucs/img/char/char4/627.png)
自動メモリー管理
自動メモリー管理は、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)のサイズをより直接的に制御するには、自動メモリー管理を無効化し、自動共有メモリー管理を有効化します。次の手順を実行します。
Oracle Enterprise Manager Database Express (EM Express)の「構成」メニューから「初期化パラメータ」を選択します。
「現行」タブを含む初期化パラメータ・ページが表示されます。
「検索」フィールドに
MEMORY_TARGET
と入力します。
MEMORY_TARGET
を選択して、「設定」をクリックします。初期化パラメータの設定ページが表示されます。
「値」フィールドに0と入力し、「メモリー」の「有効範囲」を指定し、「OK」をクリックします。
うーむ…。
自動メモリー管理を無効にしてから自動共有メモリー管理を有効にしているように思える…。
謎です…
なお、自動共有メモリー管理を無効にするには、
自動メモリー管理を無効にしたうえで、SGA_TARGET初期化パラメータに何も設定しない、あるいは0を設定します。
この状態(自動共有メモリー管理も自動メモリー管理も無効)のことを手動共有メモリー管理と呼ぶそうです。
所感
まだ完全に理解できていませんが、自動メモリー管理と自動共有メモリー管理について整理してみました。
いつも勉強すると深追いしすぎて混乱してしまい、時間ばかり使ってしまうので、ここはいったん先に進みます。
この先勉強を進めるうちに唐突に理解できることもあるので…今回もそれを信じます
すっかり夜も更けてしまったので、残りの復習は明日に持ち越しです