持続的接続を理解するために(その2)
2009/12/02 | MySQL
マニュアルに記載のある、持続的接続を使用した際のメリットとデメリット、その他諸々を列挙してみる。
http://www.php.net/manual/ja/features.persistent-connections.php
機能としての違い
- 機能の違いは持続するか否か、それだけ。
持続的接続を使用するメリット
- 確立されたコネクション(apacheの子プロセスごとに管理)があると、それを使用するので、接続を確立する処理が減る。まず最初にapacheによってどの子プロセスに処理が渡されるか決められ、その子プロセスが当該接続を確立済みかどうか調べ、確立された接続があればそれを再利用する。だから処理が減る。つまりその分軽くなる。
持続的接続を使用した際のリスク
- トランザクション使用時にコミットなりロールバックなりしないでスクリプトが終了(意図する・しないにかかわらず)したり、テーブルをロックしてロックを解除せずにスクリプトを終了すると、当該子プロセスのリンクコネクションは「トランザクション途中」や「ロック中」のままとなる。だから次にその子プロセスに処理が割り当てられると、トランザクション途中やロック中な状態のコネクションを使用する羽目になる(多分希望通りに動作してくれない)。
結論として、register_shutdown_function()関数を使って、後始末をしてくれる関数を用意しておくか、トランザクションやロックを使用する場合は、そもそも持続的接続を使用しないほうが安全。
なんとなく、少しずつだけど理解できてきたような気がする。