[PHP-users 14334] Re: OCIPLogonの動作

php-users @ php.gr.jp php-users@php.gr.jp
2003年 3月 26日 (水) 09:58:50 JST


宇野様:早速ありがとうございます。

|> 設定や、これまでどういう試験を行なって現象を確認されているのかが
|> 分からないので、推測ですけれど。

テストは非常に単純なものです。
<?
function getmicrotime(){ // 現在時刻を取得する関数
    list($usec, $sec) = explode(" ",microtime());
    return ((float)$sec + (float)$usec);
}
$start_time=getmicrotime();
$conn = OCIPLogon("sisman","sismanager","sis.world");
$end_time=getmicrotime();
$proc_time=($end_time-$start_time)*1000;
print $proc_time."<br>";
?>
このスクリプトを双方のサーバーで実行してみている
だけです。

設定はどのような部分をお伝えすればよいでしょう。
PHPにはこういうことに関する設定項目はないと思います。
Apacheはほぼディフォルトどおりです。

|> テスト環境でWebサーバーに掛けている負荷が、
|> 本番環境での実際の負荷に比べて軽すぎるのではないでしょうか。
|> 本番環境と同じ程度の同時アクセス負荷をかけたらテスト環境でも
|> 接続数が同様に増えていくのではないかと…。

実はテスト、本番といっても社内向けのサービスサイト、
さしたる負荷はかかっていません。またテストは本当に誰も
つないでいないときに行っても結果は同じです。

|> 各スクリプトで、DBアクセス終了後に早めにOCILogoff()するように
|> すると事態が改善されるかもしれません。

どの接続の場合でも(OCIPLogonでもOCINLogonでもOCILogonでも)、
OCILogoff()をしてもOracleから見たらセッションは切断されないよう
です(INACTIVEセッションが残ります)。(大体いつOracleのセッション
がなくなるのかタイミングもよく理解できていません)

わからないなりに感じなのですが、
Apacehのプロセス(スレッド?)の中にはセッションがちゃんと残って
いるのに、PHPが接続要求を出すときに、それが見つけられなくて、
新たにセッションを張ってしまってる、というように思えます。

上のスクリプトを実行すると、テストサーバーは0.2ms(!)前後、
本番サーバーは約0.9秒から1.5秒程度かかります。
この差は・・・・なんとか埋めたいと思ってしまいます。





PHP-users メーリングリストの案内