[ Oracle ] OracleDBアーキテクチャのイメージ

[ Oracle ] OracleDBアーキテクチャのイメージ

本記事では、OracleDBアーキテクチャの基本イメージについてまとめます。

 

アーキテクチャ概要

メモリー上のコンポーネント : インスタンス

SGA(System Grobal Area)

  1. データベース・バッファ・キャッシュ
  2. 共有プール
  3. ログ・バッファ
  4. ラージ・プール
  5. Javaプール
  6. Streamプール

バックグラウンド・プロセス

  1. CKPT
  2. PMON
  3. SMON
  4. DBWn
  5. LGWR
  6. ARCn
  7. MMON
  8. RECO

ディスク上のコンポーネント

データベース・ファイル

  1. データファイル
  2. REDOログファイル
  3. 制御ファイル

Other

  1. アーカイブREDOログ・ファイル
  2. 初期化パラメータ・ファイル
  3. パスワードファイル

 

なぜコンポーネントがメモリーとディスクに別れているの?

DBはその大目的として、ユーザ・プロセスからのデータ取得要求に応じ、保存してあるデータをユーザ・プロセスに返却するというものがあります。

その時取得されるデータは、基本的にディスク上のデータファイルに保存されています。データは大容量を必要とすることがほとんどですので、HDDやSDDなどに格納しておくことが現実的だからです。

では、DB関連のプログラムやデータは全て、ディスク上に格納しておけば良いのでしょうか。一般的に外部ディスクへのI/Oというものは、ほとんどの場合においてメモリーに対するそれよりも低速となります。従って、可能な限り、データやプログラムははメモリー上においておいた方が高速に処理することが可能になります。

そういった考えから、コンポーネントがメモリーとディスクに別れています。
それぞれに格納されているものの大まかな中身は、次のようなものになります。

  • メモリ上(インスタンス)
  1. ユーザ・プロセスからの要求を受付けたり、DB運用を行うためのプログラム
  2. 頻繁に使用されるデータそのもの
  • ディスク上
  1. 大多数のデータ
  2. 過去のデータのバックアあっぷ

ディスク上のコンポーネントを特に、 インスタンス と呼称します。インスタンスはその内部機能の性質から、さらに SGA と バックグラウンド・プロセス という2つのカテゴリに分類されます。

SGAってなに?

SGAとは、メインメモリー内のインスタンスの領域の一部に対する呼称です。
中身について、簡単に説明して行きます。

共有プール

解析済みのSQLやPL/SQLなどを格納する場所です。

ユーザ・プロセスから  SQL が発行された場合、それを受け取ったサーバー・プロセスはそのSQLを解析(Fetch)し、実行計画を作成します。その実行計画が、この共有プールに格納されます。次にSQLを発行された時、この共有プールに解析済みのものがあればそれが使用されるので、Fetch分の負荷が減ります。

余談ですが、SQLがほんの一部でも変更されていた場合は、たとえ実行計画に変更がなかったとしても再Fetchが発生します。この時、SQLの差分をバインド変数などに吸収させていた場合、再Fetchは発生しません。

これも余談ですが、Fetchが省略された場合、SQLの性能調査などを正確に行えないことがあります(本来発生するFetch分のコストがカットされるため)。
性格な性能調査を行う時は、共有プール内の解析済みSQLをフラッシュすることが必要です。
(Alter System Flush Shared_Pool)

 

データベース・バッファ・キャッシュ

ここには、データファイルから読み取られたデータのコピーが格納されます。DBデータ版のキャッシュです。

ディスク上のデータが取得された時、そのデータはこのキャッシュに一時保存されます。その後サーバー・プロセスがデータ要求を受けた時には、ディスク上に探しに行く前にこのキャッシュ内にデータが存在しないかどうかを検索します。

ここでデータを発見することが出来た(キャッシュ・ヒット)ならばディスク上に見に行く必要がなくなり、I/O負荷が大幅に削減されます。ここでデータが見つからなかった場合(キャッシュ・ミス)、初めてサーバー・プロセスはディスク上のデータ取得へ向かいます。

 

REDOログ・バッファ

DMLやDDLの操作内容がここに記述されます。これは、操作の巻き戻しや再実行のために使用されるデータの素です。あくまでこれはメモリー上のバッファであり保存量も多くないので、後ほどREDOログ・ファイルというデータに出力されます。この書き込みは、主にcommit実行時などに行われます。

 

ラージ・プール

共有プールに入りきらないような大量のメモリ割り当てにために使用される領域です。ラージ・プールを使用するかどうかは、オプションになります。あまりきにすることはないでしょうか。

 

Javaプール

JVM(Java Virtual Machine)のJavaコードとデータが格納される領域です。あまりきにすることはないでしょうか。

 

Streamsプール

Oracle Streams用のメモリ領域です。Oracle Goledn Gate や Oracle Data Pump などで使用されます。あまりきにすることはないでしょうか。

バックグラウンド・プロセスってなに?

バックグラウンド・プロセスとは、システムの整合性保持などを目的として実行されるプロセスです。一部を下記で説明します。

 

CKPT (CheckPoint)

チェックポイントとは、バッファキャッシュとデータファイルを同期するためのイベントです。なぜ同期が必要なのかといえば、SQLの実行結果は即座にディスク上のデータに波及するものではないからです。

例えばupdateがユーザ・プロセスから要求されデータを更新した場合などにおいて、実際更新されるのはメモリ上のデータ・バッファ・キャッシュです。この時点ではディスク上のデータに変更は及んでいません。

当然それでは後々困ってしまいますから、このチェックポイントという契機で以って、キャッシュ上のデータ内容でディスク上のデータを更新してやります。

チェックポイントが発生すると、SCNと呼ばれるチェックポイント情報を発行し、DBWnにデータファイルの書き込みを依頼します。CKPT自体は、データファイルへの書き込みは行いません。

DBWn(DB Writer n)

CKPTからの依頼(シグナル)を受け、データベース・バッファ・キャッシュ上の変更されたデータ(updateなどが行われてたデータ)を、ディスク上のデータ・ファイルに書き込みます。

なお、チェックポイントの発生時以外にもDBWnが起動するタイミングはいくつかあります。

LGWR(Log Writer)

ログライターは、メモリ上にあるREDOログバッファの内容を、ディスク上のREDOログエントリ・ファイルに書き出すプログラムです。書き込みを行うタイミングは、主に次のタイミングです。

  • Commit時
  • タイムアウト時
  • REDOログバッファが容量の1/3に達した時

データベース・ファイルってなに?

さて、ここまではメモリ上の領域についてお話をしてきました。ここからはディスク上の領域についてです。

前述したように、メモリ上に保管されない大多数のデータはディスク上に保存されます。その場所が、データ・ファイルです。

ただ、検索対象データ以外にもディスク上で管理しなければいけないものがいくつかあります。その中でも特に、SCNでメモリ上との同期が取られていなければいけないという制約をもつものを、「データベース・ファイル」と呼称します。

データベース・ファイルには、次のようなものがあります。

 

データ・ファイル

Oracleが管理すべき内部データ、ユーザの検索対象となるようなデータが格納される場所です。データ・ファイルの物理的配置は複雑ですが、ユーザがそれを意識する必要がないよう、論理記憶域構造という構成で整理されています。

 

REDOログファイル

データベースに対して行われた全ての更新情報が記録されているファイルです。前述したREDOログ・バッファからの書き込みを受けるものです。いくつかのREDOログ・グループと呼ばれるディスク群を用意しておくことで、LGWRからの書き込み対象を切り替えることができます(ログ・スイッチ)。

DBに関する変更の全てを書き込むものの、ログ総量がこの領域の上限を超えてしまった場合、ディスクの初めから再度書き込みを行うため過去のデータが上書きされてしまいます(循環式)。

それを防ぐ為にも、REDOログファイルは、さらに外部に、アーカイブREDOログファイルとして退避することが望ましいです。

なお、このようなアーカイブREDOログファイルへのデータ退避は、バックグラウンドプロセスの ARCn(アーカイバ)と呼ばれるプログラムに担当させることができます。ARCnは必須プロセスではありませんので、必要に応じて設定gが必要です。

 

制御ファイル

データベースに対応づけられたファイルで、データベース内の全てのファイルの物理構造やタイムスタンプを保持しています。

制御ファイルには重要なデータが含まれており、デフォルトでは3つ作成されます。しかし3つ作られていたとしても、1つが壊れるとデータベース全体が停止します。

 

 

その他

ここでは、上述したもの以外のコンポーネントについて簡単にまとめます。

ここまで述べたのは、ディスク上に存在するインスタンス(SGA + バックグラウンドプロセス) と、データベース・ファイル の二つでした。
これらは、インスタンス中のCKPTが発行する SCN(System Change Number) によって同期されています。

次に挙げるものは、ディスク上に存在するという意味ではデータベース・ファイルと同じですが、SCNによる同期対象ではないという点で、データベース・ファイルとは異なるものです。

 

アーカイブREDOログ・ファイル

前述した、REDOログ・ファイルのバックアップデータです。REDOログファイル自体は循環式によりいずれ過去データが上書きされてしまうので、アーカイブファイルとして外部に出力します。

 

初期化パラメータ・ファイル

インスタンスとデータベースの構成情報を含むファイルです。テキスト形式のものとバイナリ形式のものがあります。設定はシステム構築時に行いますが、後から変更できるものもあります。

パスワード・ファイル

ユーザーのパスワードを保持するファイルです。

 

 

まとめ

  • OracleDBは、主にメモリ上の領域とディスク上の領域とでコンポーネントが大別される。
  • メモリ上の領域のことを特に、インスタンスという。
  • インスタンスの中には、SGAとバックグラウンドプロセスがある。
  • SGAの中には、解析済みSQLやデータバッファ・キャッシュ、REDOログ・バッファなどが存在する。
  • バックグラウンドプロセスには、チェックポイントの発行、データファイルへの書き出し、REDOログファイルへの書き出しなどを担うプログラムが存在する。
  • ディスク上の領域で、インスタンスとSCNで同期されているものを特に、データベース・ファイルと呼ぶ。
  • データベース・ファイルの中には、データ全体、REDOログファイルなどが存在する。

 

 

Oracleカテゴリの最新記事