Oracle新人のRACインストール その16

<Oracle新人のRACインストール その16>
ペンネーム: world famous beagle

みなさん、こんにちは。
新人のRACインストールはまだ続きます。
印旛くんもようやくOracleに関わりはじめました。

今回は、初期化パラメータの”processes”。
インストール時に、色々な初期化パラメータを設定しなければなりませんね。

これは、設計時に考慮されているかと思いますが、印旛くんには、DB設計は
まだ荷が重いので、このパラメータはどのようなものか、岸田さんがなぜこの
ような値を設定しているのかを勉強している、というところでしょうか・・・。

それでは、スタート!

———————————————————————

よし、今日は”processes”だな。
岸田さんがくれた設計書の値は、1000になってるな。なぜでしょう?
processは、英語だと”過程”、”処理する”っていう意味だよね。
Oracleはどんな意味で使ってくるかな。いざ勝負!

まずは、マニュアルを見てみると・・・
「processesには、Oracleに同時に接続できるオペレーティングシステムの
ユーザプロセスの最大数を指定する」とあるな。
ふーん。さっぱり意味がわからん。

さらに、「この値は、ロック、ジョブ・キュー・プロセス、パラレル実行プロ
セスなどのすべてのバックグラウンドプロセスを考慮して設定する必要がある」
と。
うーーーん・・・。
そして、「”sessions”および”transactions”パラメータのデフォルト値は、
このパラメータから導出される」か。

「このパラメータの変更をするにはOracleを再起動する必要があります」
最後だけわかるな・・・。

なんだか重要そうなパラメータだな。うん。
他のパラメータにも関係あるみたいだし。
とりあえず、富樫さんに相談だな。

「富樫さん、processesっていう初期化パラメータを調べてるんですが、さっ
ぱりわからないんです。
バックグラウンドプロセスが関係ありますよね?」
「まあ、そうだね。バックグラウンドプロセスは、どんなのがあるか知ってる
んだっけ?」
「あ、はい。ログライター、DBライター、チェックポイント、
システムモニター、プロセスモニターでしたっけ?」
「お。勉強してるねぇ。それは、最低限の5つだけど」
「他にもあるのは知ってるんですが、名前が出てきませんね・・・」
「まあいいや。プロセスを説明するのは、難しいね。
バックグラウンドプロセスはOracleそのもので、Oracleが動くためには
絶対に必要なプログラムなんだよ」
「だから、さっき印旛くんが言った5つのバックグラウンドプロセスは、5つの
プログラムがOracleに接続しているプロセスとして数えることになるんだよ」
「はい・・・」
「それ以外には、sqlplusとか使ってOracleに接続するときもプロセスが動く
んだよ。」
「あ、なるほど。岸田さんの設計書のprocessesの値は1000なんですけど、こ
れはプロセスを1000個、Oracleに接続できるってことですね?」
「そうだね。実際に見てみるといいよ。v$processっていうビューがあるから」
「はい。そうしてみます」

早速みてみよう。

SQL> select username, terminal, background, program from v$process;

USERNAME    TERMINAL  BA  PROGRAM
--------------------------------------------------
                          PSEUDO
oracle      UNKNOWN    1  oracle@pc200 (PMON)
oracle      UNKNOWN    1  oracle@pc200 (DIAG)
oracle      UNKNOWN    1  oracle@pc200 (PSP0)

-----------------省略-----------------

oracle      pts/2         oracle@pc200 (TNS V1-V3)
oracle      UNKNOWN    1  oracle@pc200 (ASMB)
oracle      pts/3         oracle@pc200 (TNS V1-V3)
oracle      UNKNOWN    1  oracle@pc200 (QMNC)

「富樫さん、このpts/2とか/3は、なんです?」
「それは、印旛くんと僕がこのOracleにコネクトしてるからだよ」
「え?」
「印旛くん、君が今、Oracleにログインする前も、まずOSにログインして、
それからsqlplusでOracleにログインしたんだから、立派なプロセスでしょ?」
「あ!そうですね。納得しました」
「よかったね」

よし、なんとなくわかったぞ。
もう一度マニュアルを確認しよう。

——processes——
システムで同時に接続できるユーザプロセスの最大数を設定する。
全てのバックグラウンドプロセスを考慮して設定する必要がある。

「うん。わかるぞ。けど値はどうやって決めるんだろう?
岸田さんの設計書は1000だけど、デフォルトの値は・・・」

デフォルト値: 40以上(上限はOSによって異なる)
値の範囲: 6以上(上限はOSによって異なる)
*RACの場合は、複数インスタンスに異なる値を設定できる

「1000っていうのは、かなり大きめな気がするなぁ」

なぜ?なぜ?なぜ?

「Oracleのバックグラウンドプロセスが100も200もあるわけじゃないだろうか
ら、ユーザがたくさんいるということか」

ということは、
「OLTP系のシステムを想定してるのかな?」

「岸田さん、今回インストールしているRACはOLTP系のシステムを想定してる
んですか?」
「なんで?」
「いや、processesの値が1000だったので、ユーザの数がかなり多いなと・・・」
「うん、そうだね」
「やっぱり」
「processesを1000にするとsessionsの値はいくつになるか知ってる?」
「え?sessionsってなんですか?」
「関係あるか、調べてみて」
「はい・・・」

—–sessions—–
システムで同時に接続できるセッションの最大数を設定する。
すべてのログインにはセッションが必要なため、このパラメータにはシステム
での同時ユーザーの最大数を実際的な値で指定する。

「ん?processesとなんか似てる気がする。何が違うのかな?」

デフォルト値: (1.1 * processes) + 5

ってことは、(1.1 * 1000) + 5 = 1105 になるのかな?
processesの値よりは必ず大きくなるのか。
やってみるか!

SQL> show parameter processes    →現状の値を確認

NAME                                 TYPE        VALUE
------------------------------------ ----------- -------
processes                            integer     500

SQL> show parameter sessions

NAME                                 TYPE        VALUE
------------------------------------ ----------- --------
sessions                             integer     555


SQL> alter system set processes=1000 scope=spfile;  →processesの値を変更
System altered.

SQL> shutdown immediate

SQL> startup          →Oracleを再起動
ORACLE instance started.

Database mounted.
Database opened.
SQL>
SQL> show parameter processes  →変更後の値を確認

NAME                                 TYPE        VALUE
------------------------------------ ----------- -------
processes                            integer     1000
SQL> show parameter sessions

NAME                                 TYPE        VALUE
------------------------------------ ----------- --------
sessions                             integer     1105

「おーーー。完璧だ!けど、sessionっていうのがよくわかんない・・」

「富樫さん、processとsessionはどう違うんですかね?
なんか”似て非なるもの”的な雰囲気ですけど・・・」
「うーん。Oracleの話だよね?」
「はい」
「processは、OS上で実行しているプログラムだよね?」
「あ、はい。そう書いてありましたね」
「そして、v$processで見たのは、Oracleに接続しているprocessだったでしょ
sessionは、Oracleから見た時にログインしてくるものって感じかな」
「あー、どちらも同時ユーザ数って書いてあるけど、processはOSで、session
はOracleってことか。なるほど。ありがとうございます」
「sessionもビューで見てみるといいよ」
「あ、もしかしてv$sessionとかっていうビューがあるんですか?」
「あるよ」
「見てみます!」

———————————————————————
暑い日が続いていますね。
子供の頃は、夏がもっと暑かったような気がします。
せみの鳴き声ももっと大きかったような・・・。
田舎に住んでいたからでしょうか???