1章 Oracleデータベースアーキテクチャ
本章ではOracleデータベースはどのようなメモリ、プロセス群で構成されているのか
そのアーキテクチャをご紹介していきます。
データベース、インスタンスとは
アーキテクチャを理解することは障害対応やパフォーマンスチューニングが
出来るようになることにもつながりますので、しっかりと覚えていきましょう。
Oracleデータベースの構成は大きく分けると2つに分けられます。
Oracleインスタンス
Oracleデータベース
Oracleはメモリ領域とプロセス群をインスタンスと呼んでおり、
ファイル群をデータベースと呼びます。
さらにOracleインスタンスを細かく分けることができます。
Oracleインスタンス
SGA(システムグローバル領域)
バックグラウンドプロセス
SGAは共有プール、データベースバッファキャッシュ、REDOログバッファ、
ラージプール等のメモリ領域が存在します。
バックグラウンドプロセスには、SMON(システムモニター)、
PMON(プロセスモニター)、DBWn(データベースライター)、
LGWR(ログライター)などがあります。
データベースはファイル群です。制御ファイル、データファイル、
REDOログファイルなどがあります。
データベースアーキテクチャ
SELECT文を実行した時、どのような流れで各領域が使用されるのか
を確認してみましょう。
SELECT文実行時の流れ
1. SQL文構文チェック
SELECT文はサーバプロセスに送信され、構文チェックを行います。
SQL文の構文が正しいかチェックし、テーブルのアクセス権があるかを確認します。
この権限情報は共有プールのディクショナリキャッシュに格納されています。
2. 実行計画の作成
SELECT文の情報を解析し、実行計画を作成します。
この実行計画などの解析情報は共有プールにキャッシュします。
キャッシュしておく理由は次回、同じSQL文が実行された時に
解析情報を再利用するためです。
3. データの取得
SELECTに必要なデータを取得します。データファイルからデータを読み取り、
データベースバッファキャッシュにキャッシュします。
キャッシュにデータが載ることで、次回から同じデータの
取得するときはデータベースバッファキャッシュから取得します。
4. 取得データの送信
SELECT文で必要なデータを取得したら、
サーバプロセスはユーザプロセスに送信します。
データベースは秒間に何百、何千という数のSQL文を処理することもあるため、
効率良くSQLを処理することがデータベースのアーキテクチャでは重要になります。
そこで1度処理したデータを再利用できるようキャッシュを利用しています。
ファイルのアクセスより、メモリのアクセス速度の方が何十倍も速いからです。
DML文(UPDATE)実行時の流れ
1. SQL文構文チェック
SELECT文はサーバプロセスに送信され、構文チェックを行います。
SQL文の構文が正しいかチェックし、テーブルのアクセス権があるかを確認します。
ここはSELECT文と同じです。
2. 実行計画の作成
SELECT文の情報を解析し、実行計画を作成します。
この実行計画などの解析情報は共有プールにキャッシュします。
ここもSELECT文と同じです。
3. 変更情報の格納
変更情報をREDOログバッファに格納します。変更情報とは実行するDML文です。
この変更情報はDB障害発生時、データの復旧に使用します。
4. データの変更
データベースバッファキャッシュにある実際のデータを変更します。
ROLLBACKコマンドでデータを元に戻す可能性があるので、
変更前の情報も保持しておきます。この変更前のデータをUNDOデータと呼びます。
COMMIT文実行時の流れ
1. REDOログファイルへの書き込み
REDOログバッファに格納されている変更情報をREDOログファイルに書き込みます。
COMMIT文が発行されると、変更情報はREDOログファイルに書き込まれます。
しかし実際のデータはCOMMIT時データファイルに書き込まれません。
データファイルに書き込まれるのは、また別のタイミングです。
SGA (System Global Area)
ではSGAの役割を復習していきましょう。
インスタンスにはSGAとプロセス群が存在します。
SGAはOracleのメモリ領域であり、SGAには各メモリ領域が存在します。
各メモリ領域は以下の通りです。
共有プール
データディクショナリの情報やSQL実行計画を格納。
データベースバッファキャッシュ
テーブルや索引などの実際のデータを格納。
REDOログバッファ
DBの変更情報を格納。
図では紹介できなかったメモリ領域も参考にご紹介します。
ラージプール
バックアップや共有サーバ接続など汎用に使用される領域。
Oracle Streamsプール
Oracle Streamsで使用される領域。
バックグラウンドプロセス
続いてインスタンス内のバックグラウンドプロセスの紹介です。
データベースライター (DBWn)
データベースバッファキャッシュの使用済みデータを
データファイルに書き込みます。
ログライター (LGWR)
REDOログバッファに格納される変更情報をREDOログファイルに書き込みます。
システムモニター(SMON)
インスタンス障害時のインスタンスリカバリを実施します。
リカバリはREDOログファイルの変更情報から、
消失してしまったデータを復旧します。
プロセスモニター(PMON)
ユーザプロセス障害時にデータベース・バッファ・キャッシュの
クリーン・アップやロックされていたリソースの開放を行います。
アーカイバー(ARCn)
ログ・スイッチの発生のタイミングでREDOログ・ファイルをコピーします。
このプロセスはARCHIVELOGモードのみ存在します。
データベース
今までOracleデータベース全体をデータベースと呼んでいましたが、
厳密にはファイル群をデータベースと呼びます。
制御ファイル
データベースの物理構造の情報を格納しています。例えば、データベース名や
データファイル、REDOログファイル名や位置(パス)情報などを格納しています。
データファイル
テーブルや索引などのオブジェクトのデータを格納します。
REDOログファイル
DB変更情報を格納します。グループ内に多重化のためのメンバーが存在します。
この変更情報はDB障害時のデータベースの復旧に使用します。
データベースには含まれませんが、
Oracleで使用されるその他のファイルは以下の通り。
初期化パラメータファイル
データベースバッファキャッシュ、REDOログバッファのサイズや、
データベース名などDBの動作を決定するための設定値が記載されている。
バイナリ形式のサーバパラメータファイル(SPFILE)と
テキスト形式のパラメータファイル(PFILE)がある
アラートログファイル
DBの起動、停止や、チェックポイント時間、DB障害時の情報などが記録されます。
トレースファイル
プロセスが様々な情報を書き込むファイル。
これも障害発生時などで分析のために使用することがあります。
いかがでしたでしょうか。DBを構成する構成要素は様々なものがあります。
覚えるのが大変な個所でもありますが、アーキテクチャを覚えることで
今後のスキルアップにつながると思います。