Oracleのプロセス
サーバプロセスとバックグラウンドプロセス
サーバプロセス:SQL文を処理するプロセス。
バックグラウンドプロセス:裏方で処理する。ログの書き込み等。
DBWR:更新済みのデータをキャッシュからディスクに書き出す。COMMITのタイミングでは書き出されず、時間をかけて書き出される。大規模なシステムやディスクへの書き込みが追いつかない場合複数のDBWRが起動されると性能が向上する。特に非同期I/Oが使えない環境で効果的である。
LGWR:COMMITの時に REDOログを書き出す。COMMITがなくても3秒に1回「rdbms ipc message」をタイムアウトしてログバッファのデータを書き出す。
PMON:メモリとプロセスの掃除屋。サーバプロセスが異常終了した場合にメモリやプロセスの片付けを行う。内部ロックやメモリを持っていたら解放する。約1分に一回行われそれ以外はスリープしている。
SMON:表領域内で隣り合う空き領域をくっつけて理12時間に1回UNDOの数やサイズを調整したり途中終了してしまったトランザクションをロールバックしたり、1次セグメントを掃除したりする。
ARCH:アーカイバプロセスはREDOログファイルをアーカイブするプロセス。保管されたREDOログファイルをアーカオブREDOログファイルという。アーカイブREDOログが作成されるまでREDoログファイルを再利用できないため動作が止まってしまうと大問題になる場合が有るプロセス。通常は「rdbms ipc message」という待機イベントでスリープしている。
RECO(リカバラー):分散トランザクション(複数のデータベースにまたがるトランザクション)の解決を行う。
CKPT(チェックポイント):テェックポイント(バッファキャッシュの変更済みデータをデータファイルに反映させる作業)の際、データファイルのヘッダにデータを書き込むプロセス。
キャッシュと共有メモリ
キャッシュをプロセスごとにもつと無駄が多く、他のプロセスが変更したデータを見られないといった不都合が生じる。
どのプロセスからも見ることができるメモリをキャッシュとしている。共有メモリを使用すると即座に他のプロセスからも見えるようになる。
SGA
PGA
共有メモリの設定
設定ファイルinitXXXX.oraを編集する。
「DB_CACHE?_SIZE」のパラメータを変更する。デフォルトでは48MByteが設定されている。
可能であれば数百MByte割り当てておきたい。
きょうゆうめもりはキャッシュだけでなく、共有プールやログバッファも存在する。
キャッシュに用いられるアルゴリズムはLRU。
キャッシュは読み込みだけでなく書き込みにもしようされる(DBWR等)。
SQL文解析と共有プール
オプティマイザ(パーサ)がSQL文をかいせきして実行計画を作っている。
コストベース;処理時間、I/O回数が最小になるものが最上
•SQL文の情報
•表やインデックスの統計情報(データ量、最大値、最小値、データ分布)
•パラメータの情報(ソートメモリのサイズ、シーケンシャルアクセスのサイズ)
•システム統計情報(CPUのクロック数、この環境のI/O性能)
例〕バインド変数を使用する。
→同じSQL文となればキャッシュが残っていれば解析が行われず、リソースの無駄がなくなる。
Oracleの起動
•NOMOUNT
初期化パラメタを読んでバックグラウンドプロセスと共有メモリ(バッファキャッシュや共有プール)の確保をする。バックグラウンドプロセスと共有メモリの事をインスタンスと呼ぶ。
•MOUNT
初期化パラメータファイルの記述にある制御ファイルの位置を確認しファイルを開く。データベースを構成するファイルの場所を知るだけなのでファイルがなくてもエラーにならない。
•OPEN
データファイルや、REDOログファイルに問題がなければ(内部的に使用するデータに辻褄が合っていれば)データを読み書きできる状態にする。
Oracleの終了
•データベースをクローズ
•インスタンスの停止
共有メモリの解放とバックグラウンドプロセスの終了。
書き込まれていない変更済みファイルをデータファイルに書き込む。
•デフォルト
接続の終了、データファイルへの書き込みを待つ。
•transaction