この記事ではOracle Databaseのメモリ管理の方法について解説します。
Oracle Databaseのメモリ管理機能
Oracle DatabaseのメモリはSGAとPGAから構成されています。
データベースが安定したパフォーマンスを発揮するためには、これらメモリの適切なチューニングが必要となります。
Oracle Databaseにはこれらのメモリのサイズを自動で調整してくれる機能があります。
メモリ管理の方式はまず、自動メモリ管理(AMM)を使用するかどうかに分かれます。
自動メモリ管理を有効化しない場合は自動共有メモリ管理と自動PGAメモリ管理をそれぞれ有効化するか選択できます。
自動メモリ管理
SGAとPGAの合計メモリを設定し、DBの使用状況によって自動的にSGAとPGAのサイズを調整してくれる機能です。
設定するには初期化パラメータ「MEMORY_TARGET」に合計メモリの値を設定する必要があります。
この管理方法を使うとHugePagesが使用できない、PGAがSGAを圧迫する可能性があるなどのデメリットがあります。
手動メモリ管理
自動メモリ管理を使用しない方式です。
設定するには初期化パラメータ「MEMORY_TARGET」に「0」を設定します。
手動といってもSGA、PGA単位で自動設定できる機能がそれぞれ存在します。
・自動共有メモリ管理(ASSM)
SGAを構成する個別のメモリコンポーネント(バッファキャッシュや共有プールなど)を自動で調整してくれる方式です。
自動メモリ管理を無効化し、インスタンスの合計SGAを初期化パラメータ「SGA_TARGET」に設定することによって有効化することができます。
自動共有メモリ管理を有効化した状態で、db_cache_sizeなどの個別コンポーネントのパラメータを設定すると、動的調整時の最低値として確保されるようになります。
・自動PGAメモリ管理
PGAを構成する個別のメモリコンポーネントを自動で調整してくれる方式です。
自動メモリ管理を無効化し、インスタンスの合計PGAを初期化パラメータ「PGA_AGGREGATE_TARGET」に設定し、初期化パラメータ「workarea_size_policy = AUTO」になっている場合に有効化できます。
推奨の設定
自動メモリ管理機能はデメリットも多く、利用があまり推奨されていません。
そのため自動メモリ管理機能を無効化し、SGAとPGAのサイズを決めたうえで、自動共有メモリ管理と自動PGAメモリ管理を有効化することが推奨されています。