必要のないときにデータベースに接続すると、回避可能な少量のオーバーヘッドが発生します。ページをできるだけ速く実行する必要がある場合は、不要なデータベース接続を回避して最適化できます。
合計 PHP 実行時間の割合としてこれが表すオーバーヘッドの量はさまざまです。たとえば、PHP スクリプトが単純で高速な場合、それに比例して、db 接続が無駄になる合計時間の割合が大きくなります。PHP スクリプトが他の多くのことを行う場合、db 接続は合計時間のより少ない割合になります。
また、データベース接続の速度は、サーバーの速度、MySQL が DNS 依存関係で構成されているかどうかなどによって異なります。
Zend Framework に取り組んだとき、「遅延」接続を実装しました。Zend_Db_Adapter オブジェクトのインスタンスはいつでも作成できますが、そのクラスはクラス コンストラクターに接続しません。最初のクエリを実行するとき (またはgetConnection()
メソッドを明示的に呼び出すとき) にデータベースに接続します。
もう 1 つの考慮事項は、クエリの実行が完了したときにデータベースから切断するまでの時間です。
1 秒あたり 1000 件の PHP リクエスト (平均して 1 ミリ秒あたり 1 件) を処理し、各 PHP リクエストが 100 ミリ秒続くとします。したがって、任意の時点で平均 100 件の PHP リクエストが進行している可能性があります。PHP コードが最初に db に接続し、最後に db やその他のリソースから切断する場合 (自動要求クリーンアップによって)、いつでも 100 個の db 接続がアクティブになる可能性があります。
ただし、データベースへの接続を遅らせ、データベースのクエリが完了したらすぐに切断し、一部の要求で完全に接続しないようにすると、平均して、同時データベース セッションの数がはるかに少なくなります。
これにより、db サーバーでのリソースの使用を減らすことができ、スループットが向上し、1 秒あたりに完了する PHP リクエストの数が増加します。