CakePHP の database.php の persistent 設定 と mysql_pconnect() の関係

Pocket

CakePHP の database.php 中に persistent という設定項目があります。

class DATABASE_CONFIG {

  var $default = array(
    'driver' => 'mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'user',
    'password' => 'password',
    'database' => 'database_name',
    'prefix' => '',
    //'encoding' => 'utf8',
    );

}

なんでこんな設定項目が必要なのか理解できなくて必死に検索してたらなんとなく分かってきたので記録として残そうと思います。

この persistent という項目は接続の永続化をするかどうかを決めるのですが、平たく言うと既に開いている接続があればそれを使いまわして、接続、切断するコストを抑える設定だということらしいです。オブジェクトの永続化とは違うらしいです。

MySQL を例にとって考えると persistenttrue なら接続を使いまわす mysql_pconnect() が使われて、逆は mysql_connect() が使われるようになります。

mysql_connect() を使った場合は明示的に接続を切断するか、スクリプトの実行が終了したと同時に接続が切断されますが、mysql_pconnect() を使った場合はスクリプトの実行が終了しても接続が維持され続けます。

何でもかんでも接続を永続化しすぎると MySQL の接続上限数に達するかもしれないので注意。

こんな感じかな。間違ってたら誰かコメントで教えてくれると嬉しいです。

参考

投稿者紹介

株式会社ユニキャスト
私たちは、テクノロジに魅せられた個性あふれるメンバーによって構成された茨城県日立市に本社を構えるベンチャー企業です。
”テクノロジを通して「驚き」と「感動」を創造し、人々の「夢」と「笑顔」を支えます。” の経営理念をモットーに明るい未来を描き、ワクワクする企画提案を続けて参ります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください