タイトル: SGA(システムグローバル領域)
OracleのSGA(システムグローバル領域)の記事です。
SGAとはインスタンス内にあるメモリの管理領域です。Oracleが起動するときに確保され、同じインスタンスに接続するすべてのプロセスから共有されます。
SGAを構成するそれぞれの要素は項目を参照してください。
SGAの全体構造
SGAは複数の領域から構成され、それぞれ役割が異なります。代表的な要素は次の通りです。
| 領域 | 役割 |
|---|---|
| データベースバッファキャッシュ | データブロックのキャッシュ。SELECTのI/Oを減らす |
| 共有プール | SQL実行計画やデータディクショナリのキャッシュ |
| REDOログバッファ | 更新内容を一時保持し、REDOログファイルへの書き出し前段 |
| ラージプール | 大きなメモリ要求向け(バックアップ、並列処理、共有サーバー) |
| Javaプール | Java VM のメモリ領域(PL/SQL Javaストアド利用時) |
| Streamsプール | Streams/Replication 用 |
SGAとインスタンスの関係
- 1インスタンス = 1つのSGA — Oracle起動時に
STARTUPでメモリ確保 - SGA + PGA — 全プロセス共有がSGA、各プロセス固有がPGA(Program Global Area)
- パラメータで設定 —
SGA_TARGET/SGA_MAX_SIZEや、より自動化されたMEMORY_TARGET
SGAサイズの確認
|
SQL> SHOW SGA |
SGAの調整
|
-- 動的に変更(spfile使用時) |
SGA管理モードの違い
| モード | 挙動 |
|---|---|
| Manual | DB_CACHE_SIZE等の個別パラメータをすべて手動指定 |
| Auto Shared Memory Management (ASMM) | SGA_TARGET を指定すれば、Oracle が領域配分を自動調整 |
| Auto Memory Management (AMM) | MEMORY_TARGET でSGA+PGAをまとめて自動管理(11g以降) |
注意点
- 本番DBで
SGA_TARGETを急に小さくすると性能低下する。段階的に調整する MEMORY_TARGET(AMM)はLinuxでは/dev/shm設定との整合が必要- SGAサイズが大きすぎるとOSのスワップを誘発し、逆に遅くなる
- Oracleバージョンで管理方式の推奨が異なる。19c以降は AMM 非推奨で ASMM 推奨
関連
- 親カテゴリ: インスタンス (Oracle)