■始めに

メモリ資源の枯渇に伴い、業務停止やデータ紛失などのトラブルがおきてしまう可能性が高いため、メモリ設計はOracle Database構築時の重要な一環です。
本日、Oracle Databaseのメモリ構造について、少しお話しさせていただきたいです。


■Oracle Databaseメモリの構成

SGA(System Global Area)

・共有メモリ
・頻繁にアクセスされるデータと制御情報などの保持
・共通サーバに接続する場合、UGA(User Global Area)セッション情報はSGA上保持

PGA(Program Global Area)

・非共有メモリ(リスナー受付後、ユーザーセッションごとに保持)
・一般的にプロセスごとにスタック領域とセッション情報確保
・専用サーバに接続する場合、UGA(User Global Area)セッション情報はPGA上保持

■メモリ管理方式

自動メモリー管理(AMM)

有効化パラメータ:MEMORY_TARGET

SGA,PGAの合計メモリ(MEMORY_TARGET)を一定値に確保したうえ、DB使用状況により、内部でSGA及びPGAのサイズを自動に調整してくれる仕組みです。
MEMORY_TARGETは動的であるため、誤ってMEMORY_TARGETを高く設定してしまうと、すぐDBに反映してしまいます。誤設定を防ぐために、静的パラメータMEMORY_MAX_TARGETが用意され、合計メモリの最大値を強制的に制限できます。なお、自動調整することでPGAサイズやSGAサイズが不足になることを防ぐために、SGAやPGAの最小サイズを確保する設定も可能です。

※システム・メモリーが4GBを超える場合は、自動メモリー管理は使用禁止される
  メモリ4GBを超えるが、自動メモリー管理方式を使用したい場合、以下の方法で対応できる。
  1.DBCAで初期設定時、手動メモリ管理を選択する。
  2.インストール完了後、パラメータを変更して自動メモリー管理に切り替える。
   ・手動メモリー管理のパラメータを無効に設定
   ・自動メモリー管理のパラメータを有効(「0」以外の値指定)に設定
   ・DB再起動

手動メモリー管理

AMM使用の場合、複雑のメモリ管理が必要がなく、管理者として負担を軽減できます。
ただし、一時的に大量の接続がリクエストされ、PGAの使用量が膨大になり、SGAを圧迫してしまう可能性があります。あるいは、SGA,PGAの合計サイズが自動に調整してくれるが、特定のコンポネートサイズが調整してくれない場合もあります。このような場合、手動でメモリー管理することも可能です。
手動でメモリー管理する方式は以下4つがある。

– 自動共有メモリー管理: SGA用

有効化パラメータ:SGA_TARGET

インスタンスに使用可能な合計SGAを指定し、DB使用状況により、内部でSGAコンポーネントを自動に調整してくれる仕組みです。
SGAには動的変更可能及び静的変更のみ可能のコンポーネントがともに存在する。動的パラメータSGA_TARGETは動的変更可能のコンポーネントを制御し、静的パラメータSGA_MAX_SIZEは動的&静的の合計サイズを制御します。

– 手動共有メモリー管理: SGA用

有効化パラメータ:MEMORY_TARGET=0
         SGA_TARGET=0

インスタンスに使用可能なSGAコンポーネントの値をそれぞれ指定する仕組みです。
管理方式として推奨しないが、特定のコンポーネントを一時的に大きくしたい場合、対応可能。

– 自動PGAメモリー管理: インスタンスPGA用

有効化パラメータ:PGA_AGGREGATE_TARGET

インスタンスに使用可能な合計PGAを指定し、DB使用状況により、内部でPGAコンポーネントを自動に調整してくれる仕組みです。
PGA_AGGREGATE_TARGETはあくまてターゲットです。PGAの使用量がこの設定を超える場合があります。PGA_AGGREGATE_LIMITを使用して、PGA使用量について厳格に制限できます。

– 手動PGAメモリー管理: インスタンスPGA用

有効化パラメータ:MEMORY_TARGET=0
         PGA_AGGREGATE_TARGET=0
         WORKAREA_SIZE_POLICY=MANUAL

インスタンスに使用可能なPGAコンポーネントの値をそれぞれ指定する仕組みです。
管理方式として推奨しないが、特定のコンポーネントを一時的に大きくしたい場合、対応可能。

各管理モードの関係を図で表現すると、
file

■関連初期化パラメータ

file


■まとめ

メモリ管理方式について、簡単にまとめました。
今後、SGA,PGA内に動いているコンポネート及びそれぞれの役割についても紹介させていただきます。

Last modified: 2021-04-19

Author