- PR -

ocinlogon+ociplogon@php4

1
投稿者投稿内容
hisui
会議室デビュー日: 2004/07/09
投稿数: 5
投稿日時: 2008-03-13 14:32
お世話になります。
oci8(PHP4)+Oracle(9i/10g)についてご教授ください。

【開発環境】
OS :WindowsXP Pro sp2
HTTPD:Apache2.2
PHP :4.4.1
DB : Oracle 10g(9i@9.2.0.5.0もある)

【やりたい事】
・秒間20〜30リクエスト程度をこなしたい
・トランザクション処理を行いたい

【課題】
・ocinlogonで17セッションを超えたあたりからDB接続が失敗するようになり
 ORA-12516が発生する事がある。

【ご教授いただきたいこと】
・ociplogon(oci_pconnect)とocinlogon(oci_new_connect)を併用した場合、
 ocinlogonを利用してもpconecctが作成したコネクションを再利用するのでしょうか?
 ※検証1をご覧ください

・上記の事を実現するためのその他の方法



現在、oci8のocinlogon(coi_new_connect)で実装を行っていますが、
上記の課題が発生し、解決策を模索しております。

DBのセッション数を増やせれば問題は解決しそうなのですが、
政治的な問題もあり、難しい状況で技術的にこれを解決できればと思っています。

ociplogon(oci_pconnect)を利用すれば、コネクション数の問題は解決するのですが、
以前MySQLでpconnectを利用して、トランザクション処理をしたところ
データの不整合が発生した記憶があり、この方法では駄目だと考えています。
そこで、トランザクション処理をする場合はocinlogon(oci_new_connect)を利用して
処理しようと考え、『検証1』をおこなってみました。

【検証1】
1.pconnectのコネクションが無い状態でocinlogonを繰り返す。
 #netstat(win)上ではポート1251のTIME_WAITが複数表示されます。
2.pconnectのコネクションが有る状態でocinlogonを繰り返す。
 #netstat(win)上ではポート1251のESTABLISHEDが1つしか表示されません。


1.2.を見ると、ocinlogon(oci_new_connect)を行っても
新規にコネクションを開かずに、pconnectで作成したコネクションを利用しているように見えます。

PHPのマニュアルを見る限り、ocinlogonは半強制的に新しいコネクションを作成すると書かれています。
これはWindow環境に依存するのか、そうでないのかお解かりになる方いらっしゃいますでしょうか?


よろしくお願い致します。
1

スキルアップ/キャリアアップ(JOB@IT)