2009-04-02 15 views
0

PHPの機能のmysql_pconnectの仕様を読んでいます。 "mysql_pconnectは、スクリプトの実行が終了してもSQLサーバとの接続が閉じられていません"。mysql_pconnectについて教えてください

接続が閉じていなければありますが、その接続はmysqlの再起動のタイミングまでとどまりますか?

答えて

0

はい、可能ですが、ではなくを使用して閉じます。mysql___close

mysqlサーバを再起動するか、接続がアイドル(使用されていない)のまま特定の時間(コンフィギュレーション変数wait_timeout)で終了したときに終了します。

1

、私はpconnectはないスクリプトの実行のために、しかし、PHPのセッション/ MySQLのセッションの期間開催された永続的な接続であると考え

私は思う、と私は間違っているかもしれませんが、...どのスクリプトが実行されているかにかかわらずPHPによって維持されているソケット接続があることを示します。メモ帳が複数実行されているのではなく、複数の文書が単語​​で開かれているような感じです。共通のデータベースリンクを使用することにより、個々のリンクを作成するための処理能力は必要ありません。

しかし、読んだら、PHPがCGIモードではなくApacheモジュールとして実行されている場合にのみ役に立つと思われます。

私の誤解を呼び出そう。

1

mysql_pconnectは、Apacheのmod_phpモジュールが接続プーリングを行うことを許可します。まだmysql_closeに電話をかけることはできますが、mod_phpは実際には閉じません。あなたのリソースハンドルを無効にします。残念なことに、このモジュールには設定がありません。そのため、プールされた接続は、wait_timeoutパラメータを使用してMySQLサーバーによって取得されます。これのデフォルト値は非常に高いので、それを利用したい場合は、おそらくその変数を低くしたいと思うでしょう。

接続プーリングでは、接続の設定とMySQLスレッドの作成の2つが保存されます。 MySQLの接続設定は他のデータベースと比較して非常に高速ですが、オンデマンドのWebサイトではこのステップを減らすことでメリットが得られます。 MySQLでのスレッド作成のコストは、基盤となるOSによって大きく左右されますが、ビジー状態のサイトではまだ勝つことができます。

ウェブサイトの速度とデータベースに表示される負荷の大きな写真を見てみる必要があります。接続プーリングを使用して十分なビジー状態のデータベースで接続スレッドを使い果たす可能性があります。ロック解除テーブルやロールバック・トランザクションなどの処理を行うために接続を閉じることにもはや依存することができないため、接続を一貫性のある状態にするためにアプリケーションが最善を尽くす必要があるという側面もあります。

さらに詳しい情報はPHP documentationにあります。

関連する問題