イントロ
今回はOracleのメモリおよびファイルアーキテクチャについて記載しております。Oracleを設計・運用するために、まずは本内容をきちんと理解することが必須となりますので、ぜひ読んでみてもらえると嬉しいです。
Oracleアーキテクチャ概要
まずはOracleアーキテクチャの概要を簡単に説明いたします。まずは全体像の概略図を記載しますので、こちらを参照しながら読み進めていただければと思います。

Oracleデータベースはインスタンス(メモリ+プロセス)とデータベース関連ファイル群から構成されます。それぞれ見ていきましょう。
インスタンス
インスタンスとはOracleの処理をつかさどる実行環境のことを指します。インスタンスは「SGA(共有メモリ領域)」と「バックグラウンドプロセス」によって構成されます。それぞれの構成要素を記載します。
SGA(システムグローバル領域)
インスタンス起動時に割り当てられるメモリ領域となります。各プロセス間で共通的に使用される点が特徴です。SGAの構成要素を下記に示します。
| メモリー領域 | 説明 |
| データベースバッファキャッシュ | データファイルから読み込んだブロックをキャッシュする、あるいは変更されたブロックをデータファイルに書き出す前の一時的な記憶領域として使用する領域となります。 |
| REDOログバッファ | REDOログファイルに書き込む前のREDOデータ(変更履歴)を一時的に保管する領域となります。 |
| 共有プール | 解析済みのSQL、実行計画、データディクショナリの情報などをキャッシュする領域となります。 |
| Javaプール | JVM内のセッション固有のすべてのJavaコードとデータが格納されるメモリー領域となります。特にJava言語で記述されたストアドプログラムの実行に使用されます。 |
| ラージプール | ラージ・プールは、大量のメモリを割り当てる場合に設定されるオプションのメモリ領域です。たとえばバックアップや並列処理などの作業領域として使用されます。 |
バックグラウンドプロセス
それぞれのインスタンスにおいてバックグラウンドプロセスも動作しております。代表的なバックグラウンドプロセスを下記に示します。
| プロセス名 | 説明 |
| データベースライター(DBWn) | データベースバッファキャッシュ内の変更済みブロックをデータファイルに書き込みます。 |
| ログライター(LGWR) | REDOログバッファのREDOデータ(変更更新情報)をCommitのタイミングでREDOログファイルに書き込みます。 |
| チェックポイント(CKPT) | チェックポイントのタイミングでDBWnに対してデータファイルに書き込む指示を行う。また、制御ファイルにチェックポイント情報を書き込みます。 |
| システムモニター(SMON) | インスタンスやファイルの状態を監視し、必要に応じてメンテナンスを行うプロセス。インスタンスが異常終了した際、次回インスタンス起動時にデータベースファイルの整合性を復旧する処理を行います。 |
| プロセスモニター(PMON) | 他のバックグラウンドプロセスを監視し、プロセスが異常終了した際のプロセスリカバリを実行する。具体的にはデータベースバッファキャッシュをクリーンアップしたり、プロセスが使用していたリソースを解放するといった動作を行います。 |
| 管理モニター(MMON) | AWRのスナップショットなど、性能分析で使用される統計情報を定期的(デフォルト60分間隔)に取得する。AWRスナップショットはSYSAUX表領域に格納されます。 |
| アーカイバ(ARCn) | ログスイッチ発生後、REDOログファイルのREDOデータをアーカイブログファイルとして作成する。 |
| リスナー登録プロセス(LREG) | インスタンスに関する情報をリスナーに登録する。 |
PGA(Program Global Area)
サーバプロセスごとに割り当てられる専用のメモリ領域です。SGAが複数のプロセスで共有されるメモリ領域であるのに対し、PGAは各プロセス専用のメモリとして使用される点が特徴です。
PGAには、SQL処理を実行するための作業領域やセッション情報などが格納されます。たとえば、以下のような処理で使用されます。
- ソート処理(ORDER BY)
- ハッシュ結合(HASH JOIN)
- セッション変数の管理
- カーソル情報の保持
これらの処理はSQLの実行時に必要となるため、PGAのサイズが不足するとディスク領域(TEMP表領域)を使用することになり、処理性能が低下する場合があります。
そのため、Oracleのパフォーマンスチューニングでは、PGAのメモリ使用量を適切に管理することも重要なポイントとなります。
データベース関連情報
一般的にデータベース関連の情報はストレージにファイルとして外部保管されることが多いです。各ファイルについて説明していきます。
| ファイル名 | 説明 |
| データファイル | テーブルやインデックス等のデータが格納されています。データファイルは表領域という論理的な記憶域に分けて格納されています。 |
| REDOログファイル | データベースに対して行われたすべての変更履歴が記録されているファイルとなります。CommitされたタイミングでREDOログバッファの情報がREDOログファイルに書き込まれます。 |
| 制御ファイル | データベースの構成情報および管理情報が格納されているバイナリファイルです。制御ファイルにはデータベース名、REDOログファイルの名前や位置、ログ順序番号、チェックポイント情報といった重要な情報が記録されています。二重、三重で冗長化しておくことを推奨します。 |
| アーカイブログファイル | 古くなったREDOログレコードが格納されるファイルとなります。REDOのログスイッチのタイミングでアーカイブログファイルにデータベースの過去の更新履歴が書き込まれる動きとなります。 |
| 初期化パラメータファイル | 初期化パラメータのリストおよび各パラメータの値が格納されます。具体的には、使用されるメモリ容量、アーカイブログモードの有効設定、アーカイブログの出力先、制御ファイルの格納場所などの様々な設定が記載されています。 |
| パスワードファイル | 管理者権限を持つユーザのパスワードを管理するためのファイルとなります。 |
まとめ
ここまで、Oracleのメモリおよびファイルアーキテクチャについて解説しました。
Oracleデータベースを理解するうえで最も重要なポイントは、Oracleは「インスタンス」と「データベース」の2つの要素で構成されているという点です。
本記事の重要ポイントを整理すると、次の通りです。
- Oracleデータベースは「インスタンス」と「データベース関連ファイル」で構成される
- インスタンスは SGA(共有メモリ領域)とバックグラウンドプロセスによって構成される
- SGAには、データベースバッファキャッシュや共有プールなどのメモリ領域が存在する
- バックグラウンドプロセスは、DBWRやLGWRなどデータベースの動作を支える重要な役割を担っている
- データベースの実データは、データファイルやREDOログファイルなどの形でストレージ上に保存される
Oracleのパフォーマンスチューニングやトラブルシューティングを行うためには、今回解説したアーキテクチャの理解が不可欠です。
まずは全体構造を把握し、それぞれのコンポーネントの役割を少しずつ理解していくことが重要になります。
当ブログでは、Oracleの運用やトラブルシューティングに関する記事もいくつか公開していますので、ぜひあわせてご覧ください。
参考資料
今回の記事を記載するにあたり参考にした資料を記載します。




コメント