質問

この疑問はありますが、ウェブを検索しましたが、答えは多様化しているようです。 PHPを介してデータベースに接続する場合、mysql_connectよりもmysql_pconnectを使用する方が良いですか?私は、pconnectの方がはるかに優れていると読みましたが、一方で、永続的な接続です...同時に10000の接続があり、すべて永続的であるため、スケーラブルではないようです。

事前に感謝します。

役に立ちましたか?

解決

MySQLでは永続的な接続は不要です。他のデータベース(Oracleなど)では、接続の作成に費用と時間がかかります。そのため、接続を再利用できる場合、大きなメリットがあります。しかし、これらのブランドのデータベースは接続プーリングを提供し、これにより問題をより良い方法で解決します。

MySQLデータベースへの接続は他のブランドと比較して迅速であるため、永続的な接続を使用しても、MySQLの利益は他のブランドのデータベースよりも比例して少なくなります。

永続的な接続にも欠点があります。データベースサーバーは、接続が必要かどうかに関係なく、各接続にリソースを割り当てます。そのため、接続がアイドル状態の場合、無駄な多くのリソースが無駄に表示されます。 10,000のアイドル接続に到達するかどうかはわかりませんが、数百であってもコストがかかります。

接続には状態があり、PHPリクエストが「継承」するのは不適切です。以前に別のPHP要求で使用されたセッションからの情報。たとえば、一時テーブルとユーザー変数は通常、接続が閉じるとクリーンアップされますが、永続的な接続を使用している場合はクリーンアップされません。同様に、文字セットや照合などのセッションベースの設定。また、 LAST_INSERT_ID()は、前回のPHPリクエスト中であっても、セッション中に最後に生成されたIDを報告します。

少なくともMySQLの場合、永続的な接続のマイナス面はおそらくその利点を上回ります。また、高いスケーラビリティを実現するためのその他の優れた手法があります。


2014年3月更新:

MySQLの接続速度は、他のブランドのRDBMSと比較して常に低かったが、さらに良くなっている。

http://mysqlserverteam.com/improving-connectdisconnect-performance/

  

MySQL 5.6では、接続および切断のコード処理の最適化に取り組み始めました。そして、この作業はMySQL 5.7で加速しました。このブログ投稿では、最初に達成した結果を示し、次にそれらを取得するために何をしたかを説明します。

詳細と速度の比較については、ブログをご覧ください。

他のヒント

基本的に、接続を作成するコストと接続を維持するコストのバランスを取る必要があります。 MySQLは新しい接続のセットアップが非常に高速ですが、スレッドのセットアップ時間とWebサーバーからのTCP / IPのセットアップ時間にはまだ費用がかかります。これは、トラフィックの多いサイトで顕著です。残念ながら、PHPには接続の持続性を制御する機能がありません。したがって、答えは、MySQLのアイドルタイムアウトを(20秒にまで)長く下げ、スレッドキャッシュサイズを大きくすることです。一緒に、これは一般的に非常にうまく機能します。

一方で、アプリケーションは接続の状態を尊重する必要があります。セッションの状態について何も仮定しないのが最善です。一時テーブルを使用する場合、CREATE IF NOT EXISTSおよびTRUNCATE TABLEを使用すると、一意に名前を付ける(useridとして含めるなど)のに役立ちます。トランザクションにはもう少し問題があります。ただし、念のため、コードは常に上部でROLLBACKを実行できます。

10000の接続に達する可能性はほとんどありません。とにかく、公式ソースにアクセスしてください。 (エンファシス鉱山)。

  

永続的な接続にない場合   追加された機能は何ですか   彼らは良いですか?

     

ここでの答えは非常に簡単です-   効率。永続的な接続は   リンクを作成するオーバーヘッドがある場合に良い   あなたのSQLサーバーに高いです。かどうか   このオーバーヘッドは本当に高いわけではありません   多くの要因に依存します。どのような   データベースの種類、または   それは同じコンピューター上にありません   あなたのウェブサーバーはどのように座っていますか   SQLサーバーが置かれているマシンをロードしました   などなど。 最終結果   その接続オーバーヘッドが   高い持続的な接続があなたを助けます   かなり。彼らは子供を引き起こす   一度だけ接続するプロセス   その寿命全体ではなく、   それがページを処理するたびに   SQLサーバーに接続する必要があります。   これは、すべての子供に対して   永続的な接続を開きます   独自の永続的なオープンを持っています   サーバーへの接続。例えば、   あなたが20人の子供がいた場合   作成したスクリプトを実行したプロセス   SQLへの永続的な接続   サーバーには、20種類の   SQLサーバーへの接続、1   各子から。

     

ただし、これにはいくつかの   データベースを使用している場合の欠点   接続制限がある   永続的な子が超過   接続。データベースに   16同時接続の制限、   そして、忙しいサーバーの過程で   セッション、17個の子スレッドの試行   接続すると、1つはできなくなります。もし   スクリプトにバグがあります   接続を閉じることを許可しないでください   ダウン(無限ループなど)、   16接続のみのデータベースは   急速に圧倒される。確認してください   情報についてはデータベースのドキュメント   放棄またはアイドル処理   接続。

mysql_connect() mysql_pconnect()は両方ともデータベース接続で機能しますが、ほとんど違いはありません。 mysql_pconnect()では、 p は永続接続を表します。

mysql_connect()関数を使用している場合、リクエストに応じて、データベース接続を開いたり閉じたりするたびに。

ただし、 mysql_pconnect()関数の場合:

  • 最初に、接続時に、関数は同じホスト、ユーザー名、パスワードで既に開かれている(永続的な)接続を見つけようとします。見つかった場合、新しい接続を開く代わりに、その識別子が返されます。

  • 第二に、スクリプトの実行が終了しても、SQLサーバーへの接続は閉じられません。代わりに、接続は将来の使用のために開いたままになります( mysql_close() mysql_pconnect()によって確立された接続を閉じません)。

mysql_pconncet()は、サイトに多くのトラフィックがある場合に役立ちます。その時点で、すべてのリクエストに対して接続を開くのではなく、プールから取得します。これにより、サイトの効率が向上します。ただし、一般的な使用にはmysql_connect()が最適です。

MYSQL_CONNECT()

1.mysql_connectを使用して接続を閉じることができます。リクエストに応じて、データベース接続を開いたり閉じたりするたびに。

2.MYSQL接続でページがロードされるたびに、ここでデータベースが開かれます

3。ページがロードされると、データベースは毎回ロードされます

4。接続を閉じるために使用されます

例:

<?php $conn = mysql_connect(‘host’, ‘mysql_user’, ‘mysql_password’); if(!$conn){ die(‘Could not connect: ‘ . mysql_error()); } echo ‘Connected successfully’; mysql_close($conn); ?>

説明:

host:ホスト名またはlocalhostなどのIPアドレスを指定します。

mysql_user:MySQLユーザー名を指定します

mysql_password:MySQLパスワードを指定します

MYSQL_PCONNECT()

1。mysql_pconncet()を使用します。最初に開いている持続的接続を見つけようとします。

2。mysql_pconncet()は永続的な接続を開きます

3。mysql_pconnect()は接続のクローズをサポートしていません

4.mysql_pconnect()は接続を閉じることができません。ここで、データベースへの永続的な接続を開きます

5。ここでは、データベースを毎回接続する必要はありません。

6。mysql_pconncet()で毎回データベースに接続する必要はありません。

詳細: http://prittytimes.com/difference-between-mysql_connect- and-mysql_pconnect /

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top