Oracleインスタンスは、データベースにアクセスし、データの管理や処理を行うためのソフトウェアプロセスとメモリ領域の集合です。具体的には、Oracleデータベースを動かすエンジンのような役割を果たしています。Oracleデータベースとインスタンスは密接に関連していますが、それぞれ異なる役割を持っています。
リンク
リンク
リンク
データベースとインスタンスの違い
- データベース: データを格納する物理的なファイルの集まり(データファイル、制御ファイル、リダログファイルなど)。
- インスタンス: データベースとやり取りを行うプロセスとメモリの集合。データベースを操作するエンジン。
インスタンスの主要な構成要素
- メモリ構造
- SGA(System Global Area): データベースのキャッシュやバッファを含むメモリ領域。複数のユーザーやセッション間で共有されるため、データベースのパフォーマンス向上に役立ちます。
- PGA(Program Global Area): 各ユーザーセッションごとに割り当てられるメモリで、データ処理や結果の一時的な保管を行います。詳細は後述します。
- バックグラウンドプロセス
- DBWn(データベースライター): データをデータファイルに書き込む役割。
- LGWR(ログライター): トランザクションログをリダログファイルに書き込む。
- CKPT(チェックポイント): チェックポイントを発行し、データの整合性を保つ。
- SMON(システムモニター)とPMON(プロセスマネージャ): システムのリカバリや、ユーザーセッションの管理を行います。
PGAの役割と具体的な処理
PGA(Program Global Area)は、各ユーザーセッションごとに割り当てられるメモリ領域で、特にSQLクエリの実行に必要なデータの一時的な保管や処理結果の保存など、個別に使われるリソースを管理します。PGAの主な処理には以下のようなものがあります:
- ソートエリア(Sort Area)
クエリの結果を並べ替えたり、集約関数の計算を行う際に利用されるメモリ領域です。ソート処理はパフォーマンスに影響を与えるため、十分なメモリが確保されていると効率よく実行できます。 - ハッシュエリア(Hash Area)
ハッシュ結合などの操作を行う際に使われる領域です。特に大規模なデータセットを扱う場合、メモリ内で処理が行えるとディスクI/Oを減らし、パフォーマンスが向上します。 - セッションキャッシュ
ユーザーごとに一時的なデータを保存する領域で、リモートデータベースへの接続情報や、特定のSQL実行結果を保持するために使われます。これにより、同じユーザーが再度クエリを実行した際にキャッシュから結果を取得でき、効率が向上します。 - カーソルキャッシュ
各セッションで開かれるSQLカーソル(SQLステートメントの一意なハンドル)を保持するための領域です。SQLのパースや実行計画をキャッシュすることで、同一SQLの再利用時に再パースを防ぎます。 - 自動メモリ管理
Oracleでは、PGAを動的に管理する機能があり、必要に応じてメモリが割り当てられます。これにより、リソースが有効に利用され、メモリ消費を最適化します。
SGAの主要コンポーネント
SGAはOracleデータベースのパフォーマンスに関わる重要なメモリ領域で、次の主要なコンポーネントで構成されています:
- データベースバッファキャッシュ(Database Buffer Cache)
データベースから読み込んだデータブロックを一時的に保持する場所で、データの再利用を効率化し、ディスクへのアクセス頻度を減らします。 - 共有プール(Shared Pool)
SQL文やPL/SQLコードの解析情報をキャッシュして再利用するための領域です。以下の2つの主要サブ領域があります:- ライブラリキャッシュ(Library Cache): SQL文やPL/SQLコードの解析結果を保持。
- ディクショナリキャッシュ(Data Dictionary Cache): データベースの構造情報(メタデータ)をキャッシュ。
- REDOログバッファ(Redo Log Buffer)
トランザクションによる変更内容を一時的に保存する領域で、LGWRプロセスによってREDOログファイルに書き込まれます。データのリカバリ時に使用され、データの整合性を確保します。 - ラージプール(Large Pool)
RMANのバックアップやリカバリ、また一部の大規模なデータ処理用に割り当てられる領域で、Shared Poolの負荷軽減を図るために設けられています。 - Javaプール(Java Pool)
Javaプログラム実行時に使用されるメモリ領域です。Oracle JVM(Java仮想マシン)で実行するJavaコードに必要です。
インスタンスの起動とシャットダウン
Oracleインスタンスはデータベースに接続する際に起動し、使用が終わるとシャットダウンします。インスタンスの起動には複数の段階があり、シャットダウンも同様にフェーズを踏んで行われます。
- 起動フェーズ:
- STARTUP NOMOUNT: インスタンスの起動のみ(データベースはマウントされない)。
- STARTUP MOUNT: データベースの制御ファイルを読み込んでマウント。
- STARTUP OPEN: データファイルやREDOログファイルにアクセスし、完全にオープンする。
- シャットダウンフェーズ:
- シャットダウンも、NORMAL、IMMEDIATE、ABORTといった方法で行います。状況に応じて適切な方法を選びます。
まとめ
Oracleインスタンスは、データベースとやり取りする際の「脳」として機能します。SGAとPGAの協働により、複数のユーザーが効率よくデータにアクセスできる環境を提供しています。SGAは共有リソース、PGAは個別リソースとして、それぞれの役割に基づいてパフォーマンスの最適化を支えています。
[参考]
Oracle Database データベース概要 19c
コメント