Oracleデータベースのアーキテクチャ

Oracleについて勉強している中で大事だと思ったことをまとめるシリーズ。

Oracleアーキテクチャ概要

Oracleデータベースサーバのアーキテクチャは大別するとメモリー構造、プロセス構造、記憶領域の3要素に分類できます。一般的なアプリケーションと同様に、実際のデータは記憶域構造に格納されますが、作業はメモリ上で行います。

OracleデータベースサーバはOracleインスタンスOracleインスタンスに関連付けられたOracleデータベースから構成されます。さらにOracleインスタンスSGA(システムグローバル領域)というメモリー構造と「バックグラウンドプロセス」というプロセス構造から構成され、Oracleデータベースは制御ファイル、データファイル、REDOログファイルという記憶域構造から構成されます。

モリー構造

Oracleのメモリー構造はSGA(システムグローバル領域)PGA(プログラムグローバル領域)から構成されます。SGAはすべてのサーバプロセスおよびバックグラウンドプロセスで共有されるメモリー領域です。一方、PGAは各サーバプロセスおよび各バックグラウンドプロセスが個別に持つ非共有メモリです。

プロセス構造

Oracleのプロセス構造にはクライアント側のプロセスであるユーザープロセスとサーバ側のプロセスであるサーバプロセスおよびバックグラウンドプロセスがあります。

ユーザープロセス

ユーザープロセスはクライアントからSQL文を発行するプロセスです。ユーザーがSQLPlusや業務アプリケーションといったSQL文を発行するツールを実行すると起動します。

サーバプロセス

サーバプロセスはSQLを処理するメインのプロセスです。ユーザーからの接続要求を受け取ると起動します。サーバプロセスは以下の処理を実行します。

  • アプリケーションから発行されたSQL文の解析および実行
  • データファイルからのデータベースバッファキャッシュへのデータブロックの読み取り
  • アプリケーションへの結果の送信

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

バックグラウンドプロセスはサーバプロセスがSQL文の処理に専念できるように他のプロセスの監視やディスクへの書き込みを行うプロセスです。Oracleインスタンスを起動すると自動で起動します。

  • DBWn(データベースライター)
  • DBWnはデータベースバッファキャッシュ内の変更されたデータをデータファイルに書き込みます。
  • LGWR(ログライター)
  • LGWRはREDOログバッファにある変更ログ(REDOログ)をREDOログファイルに書き込みます。
  • CKPT(チェックポイント)
  • データベースバッファキャッシュにある変更バッファをデータファイルに書き込む内部イベントをチェックポイントと呼びます。チェックポイントはデータベース内部で定期的に起こっています。 CKPTは内部イベントであるチェックポイントが起こるとDBWnにシグナルを送り、データベースバッファキャッシュにある変更バッファをデータファイルに書き出すよう指示します。
  • SMON(システムモニタ)
  • SMONはインスタンスが異常終了した後の次回インスタンス起動時にインスタンスリカバリを実行します。また、使用されなくなった一時セグメントのクリーンアップを行います。
  • PMON(プロセスモニター)
  • PMONはユーザープロセスで障害が発生した場合にユーザープロセス障害からのリカバリを実行します。データベースバッファキャッシュのクリーンアップやユーザプロセスによって使用されていたリソースの解放(ロックの解除など)をおこないます。
  • ARCn(アーカイバー)
  • ARCnはログスイッチが発生した際にREDOログファイルを指定したストレージにコピーします。

データベースの論理構造

データベースを構成する論理構造には以下のものがあります。

  • データベース
  • データベースは複数の表領域から構成されます。データベースは表領域という論理的な記憶域単位に分割されます。
  • 表領域
  • 表領域は表や索引などのデータを格納する領域です。表領域には物理ファイルであるデータファイルを対応付けます。表を作成する際に指定する表の格納領域は表領域ですが、実際のデータは対応するデータファイルに格納されます。
  • データブロック
  • データブロックはデータベース内での最小領域です。ディスクIOの最小単位でもあります。
  • エクステント
  • エクステントは領域の割り当て単位です。連続したデータブロックから構成されます。領域の割り当てはデータブロック単位ではなく、エクステント単位で行われます。
  • セグメント
  • セグメントは表や索引を構成するエクステントの集合体です。特定の表や索引などに割り当てられた領域ともいえます。

    まとめ

    Oracleデータベースの構成がどうなっているかというのは、実務の中ではそんなに意識することはないですが、表領域の概念などは知っておかないと、エラーが出た時などの対応スピードなどに影響してきます。また、データベースを新たに構築する際にも、それぞれのサイズを決めたりする必要があるので、必要な知識になります。