mysql_connect()とmysql_pconnect()どちらが

自分のサイトに適しているか教えて下さい。

サーバー:XREA
言語:php
アクセスは多く、1秒間にMySQL接続が5~10くらいあると思います。(8割がSelect)

検索しても、phpマニュアルばかりで結局どういう場面で使い分ければ良いのか分かりませんでした。
pconnectのほうが負荷が大きいけど、早いみたいな考え方でいいんでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2007/02/06 18:06:01
  • 終了:2007/02/06 19:40:18

ベストアンサー

id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402007/02/06 18:28:30

ポイント40pt

pconnectのほうが負荷が大きいけど、早いみたいな考え方でいいんでしょうか?

そうなることが多いですが、厳密には異なる場合もあります。


コネクションを張り続けることで、いちいち接続したり切断したりするコストを下げられますが、反面コネクションを張りっぱなしにすることにより、サーバー側のメモリなどのリソースを多く消費します。

とくに PHP の場合最大で Apache のプロセス数だけコネクションが張られるのでDBの負荷は大きいです。

どちらの方が有効に働いて早くなるかはケースバイケースなので、一概には言えません。


一応今回の場合 XREA という共用サーバーであること、

PHP でありいわゆるコネクションプーリングのメリットを生かしにくい環境である事、

MySQL サーバーは比較的コネクションの作成のコストが低いのでメリットが出にくいことから、mysql_connect の使用をオススメしておきます。

id:wrwrwrwr

大変よく分かりました。

ありがとうございました。

2007/02/06 18:35:54

その他の回答(2件)

id:inokuni No.1

いのくに回答回数1343ベストアンサー獲得回数212007/02/06 18:13:54

ポイント10pt

http://www.atmarkit.co.jp/flinux/rensai/mysql05/mysql05b.html

MySQLサーバへの接続にはmysql_connect関数を下記の要領で用います。

<?php
$接続ID = mysql_connect("MySQLサーバのアドレス:ポート番号","ユーザー名","パスワード");
?>

 mysql_connect()の戻り値として接続IDを受け取ります。切断の手順を加えると下記のようになります。

<?php
$接続ID = mysql_connect("...","...","....");
mysql_close($接続ID);
?>

mysql_connect()関数とは別に、もう1つMySQLサーバとの接続を確立する関数が用意されています。上記のmysql_connect()関数がスクリプトの終了とともに自動的に接続が解除されるのに対し、下記の方法はスクリプト終了後も永続的に接続が確立されます。

<?php
$接続ID = mysql_pconnect("MySQLサーバのアドレス:ポート番号","ユーザー名","パスワード");
?>

 mysql_pconnect()関数は、すでに同じサーバ・ユーザーで接続が確立されている場合、新たな接続を試みず、既存の接続IDを返します。そのため何度呼び出されても無駄な接続が発生しません。データベースへの接続が頻繁な用途では、プロセスを最小限にできるので動作コストが少なくなります。しかし、データベースとの接続がそれほど頻繁でない場合は、サーバに無駄なプロセスを常駐させることになります。どちらの接続関数を使うかは、運用をよく考える必要があります。

id:wrwrwrwr

残念ながらこちらは既に読んでおりました。

これらを踏まえたうえで、自分の環境にどちらが適しているか知りたかったです。

2007/02/06 18:35:21
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402007/02/06 18:28:30ここでベストアンサー

ポイント40pt

pconnectのほうが負荷が大きいけど、早いみたいな考え方でいいんでしょうか?

そうなることが多いですが、厳密には異なる場合もあります。


コネクションを張り続けることで、いちいち接続したり切断したりするコストを下げられますが、反面コネクションを張りっぱなしにすることにより、サーバー側のメモリなどのリソースを多く消費します。

とくに PHP の場合最大で Apache のプロセス数だけコネクションが張られるのでDBの負荷は大きいです。

どちらの方が有効に働いて早くなるかはケースバイケースなので、一概には言えません。


一応今回の場合 XREA という共用サーバーであること、

PHP でありいわゆるコネクションプーリングのメリットを生かしにくい環境である事、

MySQL サーバーは比較的コネクションの作成のコストが低いのでメリットが出にくいことから、mysql_connect の使用をオススメしておきます。

id:wrwrwrwr

大変よく分かりました。

ありがとうございました。

2007/02/06 18:35:54
id:kn1967 No.3

kn1967回答回数2915ベストアンサー獲得回数3012007/02/06 18:29:12

ポイント30pt

(1)利用者が特定少数

pconnect

不特定多数のアクセスを受け入れると負荷が非常に大きくなってしまうが、特定少数であれば接続待ち時間のロスを大きく減らす事ができる。

(2)その他

connect→close

サーバー負荷が掛かった場合はタイムアウトなどが発生して、自然とアクセス制限がかかったような状態になる。


上記は非常に単純に分けたのですが、例えば『書き込み権限のある人/ない人』や『関係者からのアクセスとゲストアクセス』などといった住み分けが出来るかどうかを検討して、利用者にあわせてプログラム側で両者を使い分けるといった事も考慮してみてください。

id:wrwrwrwr

大変よく分かりました。

ありがとうございました。

2007/02/06 18:36:47

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません