phpでOracleにセッション張りっぱなしになる

php
スポンサーリンク

Oraの画像がでかい…笑

事象

仕事で相談を受けた。

「Webサイトへの同時アクセス数が大量にあるとき、Webページが閲覧しにくい状態となり、調べてみるとOracleへのセッション数が大量に溜まっていた。」

これを解消したい。

 

原因

調べてみると、phpの公式サイトにそれらしき説明があった。

phpでOracleに接続する際に利用するoci8において使用できる関数が3つ用意されてる。

上記3つは、上から順に、接続の寿命が短い。

今回の事象を調べてみると、一番下のoci_pconnect()を 利用していた。

oci_pconnect()は、キャッシュの量(oci8.max_persistent)や接続持続時間の秒数(oci8.persistent_timeout)でキャッシュの寿命を指定できる。

それぞれphp.iniで設定でき、値を「-1」とした場合には、無制限となる。

デフォルト値が何か公式サイトに見当たらなかったが、php7.4でphp.iniで設定せずにphpinfoを確認してみると「-1」(無制限)になっていた。

 

以下の順番でためすことにした。

  1. oci8.persistent_time の値をチューニング(これが設定も評価も簡単そう。)
  2. oci8.max_persistent の値をチューニング
  3. oci8_pconnect()をoci8_connect()に変える

 

コメント