ODBCコネクションプーリング機能について説明します。
ODBCコネクションプーリング機能とは
ODBCコネクションプーリング機能 (以降、プーリング機能と呼びます)とは、アプリケーションから切断要求されたコネクションをプール中に保存しておき、次の接続要求があった場合に再利用する機能で、ODBCドライバマネージャが提供しています。
インターネット環境では、数多くのパソコン上のWebブラウザからアクセス要求が発生し、Symfoware/RDBのデータベースへの接続および切断が繰り返されます。この状況下でプーリング機能を利用すると、コネクションが再利用されてパフォーマンスが向上します。
ODBCコネクションプーリング機能とリソースプーリング機能
ADOやADO.NETを利用した場合には、ODBCドライバマネージャが提供するプーリング機能の他に、OLE DBコアコンポーネントが提供するリソースプーリング機能を利用することができます。プーリング機能とリソースプーリング機能の同時使用はできません。
ODBCドライバマネージャが提供するプーリング機能では、プール中の使用されていないコネクションを自動的に解放するまでの時間(プーリング時間)を指定することができます。一方、OLE DBコアコンポーネントが提供するリソースプーリング機能では、プーリング時間を指定することができず、OS任せになります(長時間接続されたままになります)。Webサーバへの電文を遮断してSymfoware/RDBのデータベースの保守を行うケースを想定して、プーリング時間を指定できるODBCドライバマネージャのプーリング機能を利用することを推奨します。
以降では、ODBCドライバマネージャが提供するプーリング機能の利用方法について説明しています。
プーリング機能を利用するための事前準備
プーリング機能を有効にするには、ODBCデータソースアドミニストレータを設定する必要があります。
設定する情報は以下のとおりです。
Retry Wait値は、サーバが応答していないと判断された時に接続プールがブロックされる時間の長さ(秒単位)です。プールの中に不良な接続がある場合、ODBCドライバマネージャは、接続が最初に再使用される前に接続を試行します。なお、接続が再度失敗した場合、ODBCドライバマネージャはエラーを返し、接続を時間でマークします。その時点からRetry Wait値が期限切れになるまで、ODBCドライバマネージャは、接続を試行することなく、失敗を返します。初期値は120秒です。
ODBCデータソースアドミニストレータは、以下の手順で設定します。
なお、設定方法については、“ODBCデータソースアドミニストレータ 3.5”を例にとって説明します。
Windows(R)のコントロールパネルから、ODBCを実行します。
[接続プール]タブを選択します。
プーリング機能の利用状況が確認できるようにする場合は、[パフォーマンスモニタ]セクションで[有効にする]を選択します。
Retry Wait値を変更する場合は、[再試行までの待ち時間]セクションに秒単位で指定します。
[接続プールのタイムアウト]セクションで、Symfoware ODOSまたはSymfoware ODOS(UniCode)をダブルクリックします。
[このドライバに接続をプールする]を選択します。
CPTimeout値を変更する場合は、[未使用の接続がプール内に保持される時間]に秒単位で指定します。
[OK]をクリックします。
アプリケーションの記述
プーリング機能は、Visual Basicの初期値では無効に設定されています。
したがって、プーリング機能を有効にするためにアプリケーションは、コネクションを接続する前にSQLSetEnvAttr関数を発行する必要があります。また、SQLDriverConnect関数を使用して接続を行う場合は、SQL_DRIVER_NOPROMPTパラメタを指定する必要があります。プールされたコネクションは、同一のドライバの間でのみ再利用することができます。
注意
IIS、Visual Basic.NETの初期値では、プーリング機能は有効に設定されています。したがって、コネクションを接続する前にSQLSetEnvAttr関数を発行する必要はありません。
プーリング機能の確認方法
以下の方法でプーリング機能の状態を確認することができます。
パフォーマンスモニタを有効にした場合は、パフォーマンスモニタで、 [ODBC Connection Pooling]オブジェクトをグラフに追加します。
以下のようなカウンタが[ODBC Connection Pooling]オブジェクトの下に表示されます。
Connections Currently Active(現在アクティブな接続):
アプリケーションが現在使用している接続の数
Connections Currently Free(現在未使用の接続):
接続要求に対して現在使用可能な接続の数
Connections Sec/Hard(毎秒の接続数/ハード):
1秒ごとにODBCデータソースに対して行われる接続の数
Connections Sec/Soft(毎秒の接続数/ソフト):
1秒ごとのプールからの接続数
Disconnections Sec/Hard(毎秒の切断数/ハード):
1秒ごとにODBCデータソースに対して行われる切断の数
Disconnections Sec/Soft(毎秒の切断数/ソフト):
1秒ごとのプールからの切断数
プーリング機能の利用上の注意事項
以下にプーリング機能を利用する場合の注意点を示します。
コネクションで利用できる一時表を使用する。
一時表はアプリケーションのコネクションで利用できる表とトランザクション内で利用できる表があります。
コネクションで利用できる一時表を使用した場合、一時表に格納したデータは、コネクションを終了したら削除する必要があります。しかし、プーリング機能を利用した場合、実際のコネクションが切断されないため、一時表に格納したデータが残ってしまいます。したがって、プーリング機能を利用する場合、一時表に格納したデータをSQLのDELETE文を使用してデータを削除させる処理をアプリケーションで行ってください。