mysql接続を閉じることは重要ですか?


88

mysql接続を効率的に閉じることが重要ですか、それともphpファイルの実行後に自動的に閉じますか?


この質問も参照してくださいstackoverflow.com/questions/336078/…–
alex

同じことがftp_closeにも当てはまると思いますか?
doc_id 2011年

mysql接続を閉じることは重要ですか?はい、それはc ++のデストラクタのようなものです
jasinth premkumar 2018

回答:


89

ドキュメントから:

注:サーバーへのリンクは、mysql_close()を明示的に呼び出して以前に閉じられていない限り、スクリプトの実行が終了するとすぐに閉じられます。

スクリプトに結果のフェッチ後に実行する処理がかなりあり、結果セット全体を取得した場合は、必ず接続を閉じる必要があります。そうしないと、Webサーバーが頻繁に使用されているときに、MySQLサーバーが接続制限に達する可能性があります。スクリプトの終わり近くまでMySQL接続を閉じることができない場合は、明示的に行う必要はありませんが、よりクリーンです。

fastcgiが物事にどのように影響するかはわかりません。 あるページでは、fastcgiをサポートするPHPのビルドは、mysql_connectの場合でも永続的な接続を作成すると主張しています。これは、スクリプトではなくプロセスが終了すると接続が閉じられるという点で、ドキュメントと矛盾します。テストするのではなく、mysql_close()を使用することをお勧めします。実際、PDOが利用できる場合は、それを使用することをお勧めします。


同じことがftp_closeにも当てはまると思いますか?
doc_id 2011年

4
これは、ユーザーが(たとえば)ページを早く閉じた場合(またはエラーが発生した場合)、接続が開いたままになる可能性があることを意味しますか?
Toni Michel Caubet 2013

1
@Toni Michel Caubet"The link to the server will be closed as soon as the execution of the script ends."ユーザーがページを早く閉じるときは、PHPサーバーには関係ありません。いつものようにスクリプトを実行し、いつものようにスクリプトを終了します。ユーザーだけが結果を見ることができません。
Arrowman 2015

9

それは重要ですか?そんなにない

従うことは良い習慣であると考えられていますか?はい。

なぜあなたがそれを閉じたくないのか分かりません。


6
のマニュアルページでさえ、mysql_close「スクリプトの実行の最後に非永続的なオープンリンクが自動的に閉じられるため、通常はmysql_close()を使用する必要はありません」と書かれていることを考慮してください。接続を閉じないのは悪い習慣だとは思いません。
nico 2010年

4
「なぜあなたがそれを閉じたくないのか分かりません。」もう一度必要になる可能性がある場合は、閉じたくないでしょう。
フランクファーマー

1
Uがajaxを使用する場合、接続が閉じられると、Uがajaxを使用しようとするたびに、接続が再び開かれ、閉じられます。これは、サーバーに対して接続を開いたままにして、クライアントが接続を開いているかどうかを気にしないよりも価値があります。ウェブサイトがスピードであることに注意してください
ロバート

それは確かに重要になる可能性があります!!! サーバーの負荷が高く、他の誰かがこれが応答しないサーバーにつながる可能性があると言ったように、閉じられていない接続がたくさんある場合、私はそれを非常に重要と呼びます!
oliiix

閉じたほうがいいです。簡単で問題ありません。
ホセカルロスPHP

4

cgiのようなものを使用する場合、スクリプトの実行の最後にmysql接続が自動的に閉じるため、mysql接続を閉じる必要はまったくありません。リクエスト間の接続を維持するmod_perlなどの永続的なテクノロジーを使用する場合は、接続やグローバル変数などを追跡することが重要です。

基本的に、永続データの場合は、自分でクリーンアップします。些細で永続的でないデータの場合、リクエストがとにかく終了すると、すべて消えます。いずれにせよ、ベストプラクティスは常に接続を閉じることです。


1
彼は永続的ではないPHPについて話しているので、それは当てはまりません。
Sasha Chedygov 2009年

2

スクリプトの実行が完了するとすぐに閉じられます。持続的接続を開いていない限り。理想的には、リソース(ここでは接続)を使い終わったらすぐに解放する必要があります。実行のすぐに再び必要になる可能性が十分にない限り。

単一のデータベースサーバーの背後にいる場合は、接続プールまたは永続接続の使用(それが意図されている場合)をお勧めします。ただし、サーバーの数が多く、負荷分散を行っている場合は、作業の分散に悪影響を与える可能性があります。通常、一部のクライアントは重いクエリを実行し、他のクライアントは軽いクエリを実行します。したがって、同じ接続がn回以上使用されると、一部のサーバーは高負荷になり、他のサーバーは十分に活用されません。より小さなttlsと可変接続プールサイズの使用を検討してください。


1

ほとんどのCMSは、リクエストの最後にMySQL接続を閉じますが、PHPがとにかくそれを行うため、これは実際には無意味です。

ただし、接続が不要になったスクリプトがあり、スクリプトの途中で言うと、他の重いアクティビティが発生する場合は、接続を明示的に閉じることをお勧めします。これにより、一部のリソースが解放されます。

現在、接続を閉じることの利点については多くのことが言われていますが、接続を閉じないことの利点についてはほとんど何も言われていません。基本的に、スクリプトの最後で接続を閉じないと、実際にいくつかのリソースを節約できます。100ページビュー/秒を受信するWebアプリケーション(または任意のアプリケーション)を想像してみてください。したがって、毎秒mysqli_close100回呼び出す必要があります。つまり、毎秒、開いている接続を閉じるためにデータベースサーバーへの不要なラウンドトリップが100回発生します。パフォーマンスの観点からは、これは純粋なオーバーヘッドです。スクリプトが終了すると、PHPは開いている接続をチェックし、それらの接続を閉じます。すべてが非常に迅速に行われるため、PHPはあなたが持っていることを認識しない可能性があります。それらの接続を閉じて、再度閉じようとします。

注:上記の回答は、持続的接続を使用していないことを前提としています(持続的接続は主要なCMSのいずれでも使用されていません)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.