業務の中でoracleを触る機会があったのですが、Oracleで使われる用語の理解が不十分だったため、こちらで図解することで整理し理解を深める目的で投稿してみました。
Oracleの構成図
下記説明です。
インスタンス
データベースに接続して操作を行うための環境
主にメモリとプロセスから構成されている
メモリ
インスタンスは、データベースのデータや情報を一時的に保存するためのメモリ
(バッファキャッシュや共有プールなど)
プロセス
インスタンスは、データベースに対するリクエストを処理するためのさまざまなプロセス
(ユーザーからのクエリを処理するプロセスなど)
インスタンスの役割は以下です。
- データ管理 : データの読み書きや更新を効率的に行う
- ユーザー接続の管理 : ユーザーがデータベースにアクセスする際の接続を管理
- トランザクションの処理 : データの整合性を保ちながら、複数の操作をまとめて処理
プロセス
リスナープロセス
Oracleデータベースにおいて、クライアントからの接続リクエストを受け付ける役割を担っているプロセス
-
接続の受付
リスナープロセスは特定のポートで待機しており、クライアントからの接続要求を受け取って適切なデータベースインスタンスに接続を確立する -
サービス名の管理
データベースのサービス名やホスト名、ポート番号を用いて、クライアントにデータベースの位置情報を提供する -
トラフィックの管理
複数のデータベースインスタンスがある場合、リスナープロセスは接続要求を適切に分散させ、各インスタンスの負荷を均等にする -
アクセス制御
クライアントがどのようにデータベースに接続するかを管理し、不正な接続を防ぐ役割も果たす
サーバープロセス
ユーザープロセスと直接のやり取りを行うプロセス
ユーザ毎に起動され、リクエストされた処理を実行する
"フォアグラウンド・プロセス"ともいう
システムグローバル領域(SGA)
System Global Area の略
Oracleデータベースが動作するために必要なメモリ領域のこと
データベースインスタンスが使用するために予約され、さまざまなデータや情報を格納する
※構成図
データバッファキャッシュ
データベースのテーブルやインデックスのデータを一時的に格納する場所
ディスクへのアクセスを減らし、データの読み込み速度を向上させる
共有プール
SQL文やPL/SQLプログラムの解析結果、実行計画、カーソル情報などを保存
同じSQL文が複数回実行される際に、再解析の必要がなくなることでパフォーマンスが向上
REDOログバッファ
データベースの変更を記録するための領域
トランザクションの整合性を保つために、変更内容が書き込まれる前にこちらに保存される
JAVA プール
Javaプログラムを実行するために必要なリソースを管理するためのメモリ領域
ラージ プール
特に大きなメモリを必要とする処理(バックアップ&リストア)に使われる
SGAの全体としての役割は以下です。
-
データのキャッシュ : データベースのデータやインデックスをキャッシュすることで、データアクセスを高速化する
(SQL文の結果やメタデータなど) -
共有情報の格納 : 複数のプロセスが共有するための情報(データベースの構造や状態など)を格納することにより、複数のユーザーからのリクエストを効率的に処理げできる
-
トランザクション管理 : トランザクションの処理に必要な情報や制御構造保存されることで、データの整合性を保ちながらトランザクションを処理する
-
バッファキャッシュ : データブロックを一時的に保存することで最近使用されたデータに迅速にアクセスが可能
プログラムグローバル領域(PGA)
Program Global Area の略
Oracleデータベースの各サーバ・プロセス起動時に自動的に割り当てられるメモリ領域のこと
プロセスが特定のプログラムやセッションに必要な情報を保持するために使用される
※PGAはサーバープロセスとバックグラウンドプロセスに割り当てられる
SGAとPGAの違いについて
SGA → データベース全体で共有されるメモリ領域であり、複数のサーバ・プロセス間で共有されるデータや情報を格納する
PGA → 各サーバ・プロセスに専用で利用されるメモリ領域であり、個別のセッションやプロセスに関連するデータを保持する
※構成図
スタック空間
各プロセスの実行時に使用されるメモリの領域のこと
局所変数や戻りアドレスが保存される
セッション情報
各セッションに特有の情報(ユーザー名、ログイン情報、接続情報など)が保存される
カーソル状態情報
SQL文の実行に関する情報や、実行計画がここに保存される。これにより、効率的なクエリ処理が可能
ソート領域
データをソートする際に使用されるメモリ領域のこと。大きなデータセットを扱う場合、この領域が重要
※参考
- 「図解入門よくわかる 最新Oracleデータベースの基本と仕組み」(秀和システム)
- 今さら聞けない!? Oracle入門~アーキテクチャ編~