疑問に思っているのですが、Web で検索したところ、答えは多岐にわたるようです。PHP 経由でデータベースに接続する場合、mysql_connect よりも mysql_pconnect を使用する方がよいのでしょうか。pconnect の方がスケーラビリティがはるかに優れていると読みましたが、一方で、永続的な接続であるため、同時に 10,000 の接続をすべて永続的に持つことは、スケーラブルではないように思われます。
前もって感謝します。
ベストアンサー1
MySQL では永続的な接続は不要です。他のデータベース (Oracle など) では、接続を確立するにはコストと時間がかかるため、接続を再利用できると非常に便利です。ただし、これらのデータベース ブランドでは接続プールが提供されており、より優れた方法で問題を解決します。
MySQL データベースへの接続は他のブランドに比べて高速であるため、永続的な接続を使用すると、他のブランドのデータベースに比べて MySQL の利点は比例して少なくなります。
持続的な接続にも欠点があります。データベース サーバーは、接続が必要かどうかに関係なく、各接続にリソースを割り当てます。そのため、接続がアイドル状態の場合、多くのリソースが無駄に消費されます。アイドル状態の接続が 10,000 に達するかどうかはわかりませんが、数百でもコストがかかります。
接続には状態があり、PHP リクエストが別の PHP リクエストで以前に使用されたセッションから情報を「継承」するのは不適切です。たとえば、一時テーブルとユーザー変数は通常、接続が閉じられるとクリーンアップされますが、永続的な接続を使用する場合はクリーンアップされません。文字セットや照合順序などのセッションベースの設定も同様です。また、LAST_INSERT_ID()
セッション中に最後に生成された ID が報告されます (以前の PHP リクエスト中であった場合でも)。
少なくとも MySQL の場合、持続的な接続の欠点はおそらく利点を上回ります。また、高いスケーラビリティを実現するには、他にも優れた手法があります。
2014 年 3 月の更新:
MySQL の接続速度は他のブランドの RDBMS に比べて常に低かったのですが、さらに改善されています。
見るhttp://mysqlserverteam.com/improving-connectdisconnect-performance/
MySQL 5.6 では、接続と切断を処理するコードの最適化に取り組み始めました。そして、この作業は MySQL 5.7 で加速しました。このブログ投稿では、まず私たちが達成した結果を示し、次にそれを得るために何を行ったかについて説明します。
詳細と速度の比較についてはブログをお読みください。