ここから本文です

mysqlのpconnect(持続的接続)の使いどころ

evo********さん

2011/3/206:17:27

mysqlのpconnect(持続的接続)の使いどころ

codeigniterとcakephpを使っているのですがこれまでDB設定の永続的接続をよくわからずtrueにして使ってきました。実際に運営しているサイトがDBをあまり使わないサイトなのですが、この場合には永続的接続をfalseにして使ったほうがいいのでしょうか?

閲覧数:
4,337
回答数:
1
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

pri********さん

2011/3/207:39:46

codeigniter は気に入っているのですが、CakePHP は使ったことがありません。
フレームワークで独自に仕掛けを用意している場合もありますが、pconnect はextension でPHPの中では低レベルAPIなので一般的な話としての回答になります。

PHPプログラム外のリソースにアクセスする処理はコストがかかる処理になります。
ネットワークを介してアクセスする場合は、さらにコストがあがります。
#コストがかかるとは重たい処理と思ってください。

PHPはバイトコードをキャッシュする仕組みもありますが、基本的にはインタープリタなのでアクセスの度にプログラムのコンパイル→実行を繰り返しています。

そのなかで、コストのかかる接続処理を毎回行うのはリソースが勿体無いので、予め作成した接続を起動中のWebサーバ(Apache)のコンテキストに登録しておいて、必要な場合にそこから、(あれば)取得する仕組みが pconnect です。

例えば、一定時間に 100リクエストのアクセスが有った場合には

connect の場合)
そのまま、100回オープンとクローズを繰り返す

pconnect の場合)
他のアクセスで処理が終わったコネクションは使い回す

といった振舞いになるので、connect が100回のオープンが必要なのに対して、それよりも小さい数のオープンですむことになります。

ということなので、1つのPHPで何度もDBアクセスする(処理に対して垂直な)場合ではなくても、そこそこアクセスがある(処理に対して並行な)場合の方が恩恵を得られると言う事になります。

処理に対して垂直な場合であれば、やろうと思えば自前でできますしね。

僕は割と積極的に pconnect を利用しておりますが、保持している接続の数や、接続のライフサイクルをコントロールできるわけではなかったりします。( connectならできるという事ではないです。それを実現するのはPHPでは結構面倒)

DBサーバとWebサーバが同じマシンで unix ドメインソケットの利用ができたり(ファイルのオープン的な扱いになる)する場合は、connect でもいいかと判断するかもしれません。(実際にCPU処理時間を計測したワケではないので、その場合はベンチマークを取ると思いますが)

この回答は投票によってベストアンサーに選ばれました!

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる