問題タブ [mysql-pconnect]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - PHP の mysql_pconnect はいつ接続が「利用可能」であると見なしますか?
私は php-fpm (fastcgi php マネージャー) を使用していますが、新しい接続を作成する代わりに、php が mysql_pconnect で作成された永続的な接続をいつ利用できると見なすかについて混乱しています。
mysql_pconnect と mysql_connect を有効にしようとすると、mysql サーバーへの開いている接続は、許可されている最大数に達するまで上昇します。mysql_pconnect がないと、一度に 30 ~ 50 の範囲の mysql 接続が開かれます。私のmysqlのwait_timeoutは5に設定されています。
mysql_pconnect の使用を開始すると、新しい接続が作成され続け、古い接続が使用可能であると認識されないように感じます。php-fpm (または fastcgi) が原因でしょうか?
mysql_pconnect が接続を「利用可能」と見なす方法についての詳細はありますか?
ありがとう。
php - 永続的な接続と待機タイムアウト
永続的な接続プールを維持しているのは誰ですか?
私はソース コードmysql_pconnect
を少し見て、それが PHP で作成された関数であり、PHP 自体が接続のプールを維持していることを理解しました。これは mysql の組み込み機能ではなく、PHP のみがプールの維持を担当します。これは合法のようです。
私は正しいですか?
遅いクエリキラー?
接続がタイムアウトになるという問題が発生しています。
のmy.cnf
構成がありますwait_timeout=5
。これは、理論的には、実行に 5 秒以上かかるクエリを強制終了するためのものです。
この構成では、クエリごとの 5 秒の制限も、永続的な接続のメリットも達成していないように感じます。
私の考えを検証し、何か提案していただけますか?
php 5.3.3、mysql ext経由のmysql 5.1、mysqlndなし
php - 永続的な DB 接続が再利用されない
認証用のアプリケーションの 1 つで phpgacl ライブラリを使用しています。このライブラリは、mysql_pconnect を使用してデータベースに接続しています。問題は、接続が再利用されず、接続が多すぎるというエラーでアプリケーション全体がクラッシュする場合があることです。同時ユーザーが多すぎるわけではないため、mysql の最大接続数を増やしても問題は永久に解決されません。問題を単純化するために簡単なテストを行いました。簡単なphpスクリプトを書きました/var/www/a.php
:
localhost/a.php
初めてヒットすると、mysql プロセスリストにデータベースへの接続が 1 つ表示されます。リンクを 2 回目にクリックすると、その接続が再利用されることを期待します。しかし、そうではありません。新しい接続が作成され、スリープ状態の 2 つの接続が表示されます。リンクを踏むたびにカウントが増えます。
Apacheを再起動すると、これらすべての接続が閉じられます。
php mysql_pconnect がどのように機能し、以前に作成された mysql 接続をどのように使用するかを知りたいです。そして、上記の例でこれが起こらないのはなぜですか?
ここのコメントの1つは次のとおりです。
You are probably using a multi-process web server such as Apache. Since
database connections cannot be shared among different processes a new
one is created if the request happen to come to a different web server
child process.
これは、Apache で mysql_pconnect を使用することは推奨されないということですか?
php - PHP で mysql_pconnect を使用することの長所と短所
mysql_connect の代わりに mysql_pconnect をいつ使用すべきかを知りたいです。
php - 動作するための Mysql_pconnect の代替
したがって、mysql_pconnect が非推奨であることはわかっています。実際にこれを機能させる方法はありますか。接続ファイルに次のような古いスクリプトがあります。
これに代わるものはありますか?
//LE
これにより、「データベースを選択できません。データベース名が正しいかどうかを確認してください。」
php - mysql_close と mysql_pconnect が機能しない
私はこのシナリオを持っています:
ファイル config.php には mysql_connect および mysql_select_db 関数があり、ファイル function.php には非常に長い関数があり、「index.php」ファイルにはこの関数 (INSERT クエリを実行する) を呼び出し、その後、私はmysql 接続を閉じます。
すべて問題ないように見えますが、そのスクリプトのパフォーマンスを ApacheBenchmark でテストすると、多くのスリープ接続と mysql が max_user_connection の制限に達していることがわかります。
そこで、mysql_pconnect 関数を使用しました。
**まず、接続時に、関数は最初に、同じホスト、ユーザー名、およびパスワードで既に開かれている (永続的な) リンクを見つけようとします。見つかった場合は、新しい接続を開く代わりに、その識別子が返されます。
次に、スクリプトの実行が終了しても、SQL サーバーへの接続は閉じられません。代わりに、リンクは将来の使用のために開いたままになります (mysql_close() は、mysql_pconnect() によって確立されたリンクを閉じません)。**
しかし、問題は解決しません:
ファイルが同じで、mysql_pconnect が同じユーザー/パスワード/データベースを使用している場合、なぜこのようなことが起こるのでしょうか?
どうすればこの問題を解決できますか? ありがとう