メモリー設定の推移
Oracle Database にはメモリー量の設定を行う多数の初期化パラメーターが存在します。初期の Oracle Database では、各メモリー領域のサイズを細かく変更してチューニングを行ってきました。その後、データベース運用の自動化が進むにつれて設定すべきパラメーターは減少していきました。
例えば初期化パラメーター sort_area_size や hash_area_size は pga_aggregate_target に統合され、共有サーバー構成以外では使われることはありません。初期化パラメーター db_cache_size や shared_pool_size 等も sga_target に統合され、個別のメモリー領域の下限を示す初期化パラメーターとして存続しています。
| メモリー領域 | 初期化パラメーター | 統合先初期化パラメーター |
|---|---|---|
| バッファ・キャッシュ | db_cache_size | sga_tager |
| Redoログ・バッファ | log_buffer | sga_target |
| ラージ・プール | large_pool_size | sga_target |
| 共有プール | shared_pool_size | sga_target |
| Streamsプール | streams_pool_size | sga_target |
| ソート領域 | sort_area_size | pga_aggregate_target |
| ハッシュ領域 | hash_area_size | pga_aggregate_target |
SGA と PGA を統合する「自動メモリー管理(AMM)」機能が提供された時期もありますが、以下のような制限があって使いにくいものでした。
- HugePages との併用ができない
- 初期化パラメーター memory_max_target を大きく設定するとあらかじめ領域を確保されてしまう
- OS に搭載されたメモリーが 4 GB 以下
AMM は初期化パラメーター memory_target と memory_max_target で SGA + PGA 両方で使うメモリー量を設定します。
Unified Memory
Oracle AI Database 26ai では、共有メモリーとなる SGA と、SQL エンジンの仮想メモリーである PGA を統合する Unified Memory を利用できるようになりました。
初期化パラメーター
| 初期化パラメーター | 説明 | 動的変更 | 備考 |
|---|---|---|---|
| memory_size | SGA + PGA 全体のメモリー量 | 可能 | 最大値は memory_max_size |
| memory_max_size | memory_size の最大値 | 不可 |
どちらの初期化パラメーターも CDB 専用であるため、PDB では変更できません。
初期化パラメーター memory_size は下限が決められており、それ以下の値を設定するとインスタンスが起動できません。マニュアル 上では下限値は 1536 MB ですが、私の検証環境では 2400 MB 以下には設定できませんでした。ORA-00093 エラーが発生します。
SQL> STARTUP
ORA-01078: failure in processing system parameters
ORA-00093: Parameter memory_size outside valid range 2516582400 to 14754351513.
SQL>
インスタンスの起動に成功すると、アラートログに以下のメッセージが出力されます。
Unified Memory ENABLED
Enabling UNIFIED MEMORY for PDB 1
Setting Unified PGA Pool max size 1000MB for PDB 1
他の初期化パラメーターとの併用
初期化パラメーター memory_size は、複数のメモリー領域を統合する機能ですが、あえてこれまでと同様の初期化パラメーターを設定した場合にどのような動作になるかを検証しました。
| 初期化パラメーター | 動作 | 実際の値 |
|---|---|---|
| memory_size | 設定値になる | 設定値 |
| memory_max_size | 設定値になる | 設定値、設定しない場合は memory_size |
| memory_target | 設定値を無視 | 0 |
| memory_max_target | 設定値を無視 | 0 |
| sga_target | 設定値を無視 | 計算値 |
| sga_max_size | 設定値を無視 | 計算値 |
| pga_aggregate_target | 下限になる | |
| pga_aggregate_limit | 設定値を無視 | 計算値 |
| log_buffer | 下限になる | |
| large_pool_size | 下限になる | |
| shared_pool_size | 下限になる | |
| db_cache_size | 下限になる |
上記の通り、SGA のコンポーネントは SGA の下限として動作し、sga_target が計算値に上書きされることがわかります。PGA は pga_aggregate_limit は無視されますが、pga_aggregate_target は設定値が有効に機能します。
初期化パラメーター memory_size が指定されると、一部の初期化パラメーターが無視されることを示す警告がアラートファイルに出力されます。
WARNING: Since memory_size is set, memory_target is ignored
WARNING: Since memory_size is set, memory_max_target is ignored
WARNING: Since memory_size is set, sga_target set by user is ignored
Starting ORACLE instance (normal) (OS id: 2725)
HugePages との関係
通常 Linux のメモリーは 4 KB のページで管理されていますが、より大きなサイズにした方が管理負荷を小さくできます。Linux では大きなページを利用する機能を HugePages と呼び、カーネル・パラメーター vm.nr_hugepages でページ数を設定します。Oracle Database では初期化パラメーター use_large_pages で HugePages 機能を利用するかを決定します。
| 設定値 | 説明 | 備考 |
|---|---|---|
| TRUE | 利用できる範囲で HugePages を使う | |
| FALSE | HugePagess を使わない | |
| AUTO | システムに使用量を要求、使えなければ TRUE と同じ | |
| ONLY | HugePages のみを使う、使えなければ起動エラー | |
| AUTO_ONLY | システムに使用量を要求、使えなければ起動エラー |
詳細はデータベース・リファレンス マニュアルを参照してください。
カーネル・パラメーター、初期化パラメーター use_large_pages 設定をデフォルトの状態でインスタンスを起動すると、アラート・ログに以下のメッセージが出力されます。
Large pages will not be used. Only standard 4K pages will be used
RECOMMENDATION:
1. For optimal performance, configure system with expected number
of pages for every supported system pagesize prior to the next
instance restart operation.
初期化パラメーター use_large_pages を auto に設定してインスタンスを再起動します。
# sysctl -a|grep nr_hugepages
vm.nr_hugepages = 0
vm.nr_hugepages_mempolicy = 0
初期状態ではカーネル・パラメーター vm.nr_hugepages は 0 の状態です。インスタンスを起動します。
$ sqlplus / as sysdba
SQL*Plus: Release 23.26.1.0.0 - Production on Mon Mar 30 16:23:08 2026
Version 23.26.1.0.0
Copyright (c) 1982, 2025, Oracle. All rights reserved.
Connected to an idle instance.
SQL> STARTUP
ORACLE instance started.
Total System Global Area 4275285504 bytes
Fixed Size 5017088 bytes
Variable Size 1795162112 bytes
Database Buffers 2466250752 bytes
Redo Buffers 8855552 bytes
Database mounted.
Database opened.
SQL> SHOW PARAMETER sga_max_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_max_size big integer 4080M
SQL>
カーネル・パラメーター vm.nr_hugepages が自動的に初期化パラメーター sga_max_size で計算された値になりました。この時、アラートログには以下のメッセージが出力されていました。
Available system pagesizes:
4K, 2048K
Supported system pagesize(s):
PAGESIZE AVAILABLE_PAGES EXPECTED_PAGES ALLOCATED_PAGES ERROR(s)
4K Configured 12 On-Demand NONE
2048K 2040 2040 On-Demand NONE
Author: Noriyoshi Shinoda / Date: March 30, 2026