Oracle

プロセスモニター(PMON)~ユーザープロセスの付き人?~

今回はOracleのプロセスモニター(PMON)について解説します。
プロセスモニターはOracleのバックグラウンドプロセスの1つであり、主にユーザープロセスで障害が起きた場合、リカバリを担当するプロセスです。

私の中では「ユーザープロセスの付き人」というイメージで理解しています。

さて、ユーザープロセスとはなんでしょう?
飲食店に例えるとサーバープロセスがレジ打ち、料理運び。バッググラウンドプロセスが料理人だとするとユーザープロセスは「お客様」だとイメージしてください。
(Oracleの公式のドキュメントを見るとユーザープロセスという言葉はなく、クライアント・プロセスという言葉が使われているようです。)
主に以下のような動きをするそうです。

・ユーザープロセスによって使用されていたリソースの開放(ロックの解除)
・データベースバッファキャッシュのクリーンアップ
・セッションのアイドル時間タイムアウトの監視

ざっと、紹介してしまいましたが、上記の動きはどれもユーザープロセス回りの動きです。
1つ1つ役割を解説していきます。
まず、ユーザープロセス障害とはなんでしょう?
1番簡単な例でいうと、SQLの問い合わせ実行中に、時間がかかりすぎてセッションを強制的に切ったときをイメージしてください。

それを踏まえてさきほどのユーザープロセスの動きを解説します。

・ユーザープロセスによって使用されていたリソースの開放(ロックの解除)
→ユーザープロセスがSQLに依頼をしているときは、処理の内容をメモリ(リソース)に退避しています。そのとき、セッションが切断されたそのメモリがずっと残ったままになります。そうすると困りますよね?そのとき、PMONがメモリを解放します。

・データベースバッファキャッシュのクリーンアップ
→これも上記と似たような話です。ユーザープロセスがSQLの問い合わせをしているときにセッションを切断すると、バッファキャッシュに不完全な状態で
データが残ってしまいます。ですので、クリーンアップします。

・セッションのアイドル時間タイムアウトの監視
→言葉の通りです。これはセッションが切断されたときではなく、セッションがいつまでたっても終わらないときの話ですね。これはPMONが監視しています。セッションとはユーザープロセスとサーバープロセスをつなぐ単位です。1人のユーザーが1つのパソコンでサーバーに繋いだら1セッション。
もう1人のユーザーがパソコンをサーバーに繋いだら2セッションという感じになります。

いかがでしたか?イメージできましたでしょうか?
これらの働きを丸暗記してもよいかもしれませんが、何やら「ユーザープロセスに密接に関わりがあるんだなぁ・・・なんか付き人みたいな感じだね♪」といった感じで覚えておけば忘れずらいし業務にも応用できる!・・・かもしれません。

以下、解説できなかった専門用語はまた別の機会で解説します。

→データベースバッファキャッシュ
→メモリの解放とクリアの違い
→セッション