ablog

不器用で落着きのない技術者のメモ

初期化パラメータ PROCESSES はいくつにすれば良い?

PROCESSESには、Oracleに同時に接続できるオペレーティング・システムのユーザー・プロセスの最大数を指定します。この値は、ロック、ジョブ・キュー・プロセス、パラレル実行プロセスなどのすべてのバックグラウンド・プロセスを考慮して設定する必要があります。

http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/server.111/E05771-03/initparams.htm#97571

ということらしいが、いまいちよくわからないので、ちょっと検証してみた。
初期化パラメータ PROCESSES は 30

SQL> select value from v$parameter where name ='processes';
VALUE
-----
30

初期化パラメータ SESSIONS は 38

SQL> select value from v$parameter where name ='sessions';
VALUE
-----
38

Oracle を起動した直後のプロセス数は 22

SQL> select program from v$process order by program;
PROGRAM
------------------------------------------------
PSEUDO
oracle@db1 (CJQ0)
oracle@db1 (CKPT)
oracle@db1 (D000)
oracle@db1 (DBW0)
oracle@db1 (DIAG)
oracle@db1 (LCK0)
oracle@db1 (LGWR)
oracle@db1 (LMD0)
oracle@db1 (LMON)
oracle@db1 (LMS0)
oracle@db1 (LMS1)
oracle@db1 (MMAN)
oracle@db1 (MMNL)
oracle@db1 (MMON)
oracle@db1 (PMON)
oracle@db1 (QMNC)
oracle@db1 (RECO)
oracle@db1 (S000)
oracle@db1 (SMON)
oracle@db1 (TNS V1-V3)
oracle@db1 (q001)

22 rows selected.

リモートマシンから sqlplus でがんがん接続してみると、接続できなくなる。

$ sqlplus system/oracle@db1 & # ← 繰返す
[oracle@s-sjdb2 dbs]$
SQL*Plus: Release 10.1.0.3.0 - Production on Thu Mar 5 15:05:38 2009

Copyright (c) 1982, 2004, Oracle.  All rights reserved.

ERROR:
ORA-12520: TNS:listener could not find available handler for requested type of
server

プロセス数が 29 まで増えている。なぜ 30 まで接続できないのかは不明。

PROGRAM
------------------------------------------------
PSEUDO
oracle@db1 (CJQ0)
oracle@db1 (CKPT)
oracle@db1 (D000)
oracle@db1 (DBW0)
oracle@db1 (DIAG)
oracle@db1 (LCK0)
oracle@db1 (LGWR)
oracle@db1 (LMD0)
oracle@db1 (LMON)
oracle@db1 (LMS0)
oracle@db1 (LMS1)
oracle@db1 (MMAN)
oracle@db1 (MMNL)
oracle@db1 (MMON)
oracle@db1 (PMON)
oracle@db1 (QMNC)
oracle@db1 (RECO)
oracle@db1 (S000)
oracle@db1 (SMON)
oracle@db1 (TNS V1-V3)
oracle@db1 (q001)
oracledb1@db1
oracledb1@db1
oracledb1@db1
oracledb1@db1
oracledb1@db1
oracledb1@db1
oracledb1@db1

29 rows selected.

追記(2009/04/24):
計算式はざっくりこんな感じ

バックグラウンドプロセス用 + アプリケーション用 + 保守用 + 余裕分

瞬間的にブチッと全部切れて、再接続すると2倍になるので、2倍にしておくとより安全らしい。

バックグラウンドプロセス用 + ( アプリケーション用 + 保守用 ) × 2 + 余裕分

多くしとけば良さそうに思えるけど、そうでもないらしい。
v$表の行数とかが増えて遅くなるので、必要以上に多くしないほうが良いらしい。


追記(2011/06/28):
参考 KROWN#106791