接続プール

従来のデータベース アプリケーションは、アプリケーションの実行中に使用するデータベースへの接続を 1 つだけ作成していました。しかし、Web のような変動の激しい環境では、このような Web 対応データベース アプリケーションは、ページがかわるたびに古い接続を閉じては新しい接続を開くという作業を繰り返さなければなりません。

変動のないデータベース接続を作成する方法の 1 つは、データベース接続を各ユーザーごとに作成してそれらを Session オブジェクトに格納するという方法です。しかし、このような方法では使用頻度の少ないアイドル状態のデータベース接続の数が増えてしまうため、トラフィック量の少ない Web サイトでしか有効ではありません。

Web 対応のデータベース接続を扱うためのより効果的な方法として、ODBC 3.0 の 接続プールという機能を使う方法があります。これは、開いているデータベース接続を維持しながら異なるユーザー要求間で接続を共有できるように管理することにより、パフォーマンスを向上させ、アイドル状態の接続の数を減らそうというものです。接続要求が発生すると、接続プールではまずアイドル状態の接続がプール内にあるかどうかが調べられ、そのような接続があれば接続プールからその接続が返されます。この場合、データベースへの新しい接続が作成されることはありません。プール内で 60 秒以上アイドル状態が続いた接続は、データベースから接続解除され、プールから除外されます。

ASP では、接続プールはデフォルトで使用可能ですが、レジストリ エントリ StartConnectionPool を 0 に設定することで使用不能にすることができます。レジストリ エントリの詳細については、「Active Server Pages スクリプト ガイド」の「レジストリ エントリの設定」を参照してください。

接続プールを最大限に活用するには、すべての ASP ページごとにデータベースへの接続を開いては閉じるという作業を繰り返す必要がありますが、このときに接続の属性をいったん指定しておき、すべてのページでそれを再利用するようにします。たとえば、Global.asa ファイルの中で "接続文字列" を使い、次のスクリプトのように Session_OnStart イベントの中で接続属性を指定します。

Session("ConnectionString") = "dsn=AdvWorks;uid=advworks;pwd=advworks"
 

次に、データベースにアクセスする各 ASP ファイルで、次のように記述して各ページの接続オブジェクトのインスタンスを作成します。

<OBJECT RUNAT=Server ID=Conn PROGID="ADODB.Connection"></OBJECT>
 

そして、次のスクリプトを使って接続を開きます。

Conn.Open Session("ConnectionString")
 

最後に、ページの末尾で次のようにして接続を閉じます。

Conn.Close
 

接続プールの使用例の詳細については、Adventure Works サンプル サイトを参照してください。

接続プールのデフォルトのタイムアウト値は 60 秒です。次の設定を使ってレジストリ キーを作成すれば、ODBC ドライバごとにこの値を変更できます。

\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ドライバ名\CPTimeout = timeout  (REG_SZ、単位は秒)
 

たとえば、次のキーは、SQL Server ドライバの接続プールのタイムアウトを 30 秒に設定します。

\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\SQL Server\CPTimeout = 30
 

次のキーは、Microsoft Access ドライバの接続プールのタイムアウトを 10 秒に設定します。

\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Microsoft Access Driver (*.mdb)\CPTimeout = 10
 

注意 上の例のレジストリ設定で、タイムアウトの値は REG_DWORD 型ではなく REG_SZ 型です。


(C) Microsoft Corporation. All rights reserved.