理系学生日記

おまえはいつまで学生気分なのか

同時接続数を増加させる際のメモリ見積り方法

Oracle に同時接続できるユーザプロセス数の最大数は processes という初期化パラメータによって制御されるのだけれど、これを増やす段になって気をつけないとならないのが「増やすことによる弊害」だと思う。
processes を増やすということは、DB サーバから見たときの最大セッション数を増やすことになるので、観点としては、当該セッション数を捌けるだけのメモリ容量なり、処理能力なりが、当該 DB サーバにあるかどうか、という点がポイントになる。
で、今回は、processes を増やす際にメモリが大丈夫かどうかについて考えてみた。


専用サーバ接続を前提にするならば、セッション数の増加はサーバ・プロセス数の増加を意味する。そして、サーバ・プロセスが使用するのは PGA であるので、基本的な部分で言えば、PGA に余裕があるかが焦点になるだろう。
きょうび、PGA は pga_aggregate_target が示す容量までは自動拡張されるので、これを MAX の容量と見ることができる。であるならば、あとは、PGA 容量が同時最大セッション数に耐えれるだけの容量であれば良い。この判断に必要になるのは、1 サーバ・プロセスが使用する PGA 容量。

既存のシステムであれば、これは v$process から判断できる。

この中の pga_alloc_mem が

プロセスによって現在割り当てられているPGAメモリー(サーバー・プロセスでオペレーティング・システムにまだ解放されていない使用可能なPGAメモリーを含む)

ということなので、

select avg(pga_alloc_mem) as avg from v$session;

としてやれば、1 プロセスあたりが PGA に占める容量が出るので、あとは pga_aggregate_target/avg と最大同時セッション数を比較し、前者の方がずっと大きいようであれば問題ないと判断して良いと思う。


ちなみに、最大同時セッション数については sessions 初期化パラメータで制御されているのだけれど、processes を変更すると「sessions = 1.1 * processes + 5」の計算式に基いて Oracle が勝手に変更してくれる*1

*1:これまで明示的に sessions を変更していなかった場合