ドライバー対応接続プール

ドライバー対応接続プールは、Windows 8 のドライバー マネージャーの新機能です。 ドライバー対応接続プールを使用すると、ドライバー ライターが ODBC ドライバーの接続プール動作をカスタマイズできます。

Note

ドライバー対応接続プールは、カーソル ライブラリではサポートされていません。 ドライバー対応接続プールが有効になっているときに、SQLSetConnectAttr を介してカーソル ライブラリを有効にしようとすると、アプリケーションはエラー メッセージを受け取ります。

ドライバー対応接続プールは、ドライバー マネージャーの接続プールに関連する次の問題に対処します。

プールの断片化 ドライバー マネージャーは、新しい接続要求の接続文字列と完全に一致する場合にのみ、プールから接続を返します。 ドライバー マネージャーが完全一致であることを求める理由の 1 つは、ドライバー マネージャーがドライバー固有のすべての接続文字列キーワードとその値を理解していないためです。 ただし、一部の接続文字列キーワード値 (データベースの名前など) では完全一致である必要がない場合もあります。これは、ドライバーが新しい接続を開くために必要な時間よりも短い時間でデータベースを変更できるためです (正確な時間差はデータ ソースによって異なります)。 また、一部の接続属性 (SQL_ATTR_CURRENT_CATALOG など) の違いは、他の属性 (SQL_ATTR_LOGIN_TIMEOUT など) の違いよりも変更に時間がかかる場合があります。 これにより、ドライバー マネージャーがプールから最も低コストで再利用可能な接続を使用できなくなる可能性もあります。 ドライバーが多数の新しい接続を作成する必要がある場合はアプリケーションのパフォーマンスが低下し、データ ソースのスケーラビリティが低下する可能性があります。 ドライバー対応接続プールを使用するとプールの断片化を軽減できます。その理由は、ドライバーが接続要求の際にプール内の接続を再利用するコストをより適切に見積もることができるためです。

アプリケーションのユーザー設定を考慮しない 一部のデータ ソースでは (一部の属性をリセットする場合と比べると) 新しい接続を効率的に開くことができるため、アプリケーションでは、プールからの多少不一致がある接続を再利用して一部の値をリセットするよりも、新しい接続を開くほうを好む場合があります (ただし、接続プールの初期化フェーズの間は低速になる可能性があります)。 一部のアプリケーションでは、正しい動作をさせるために不一致を修正するコストが多くなる可能性はあるものの、サーバーの負荷を小さくして、開く接続を少なくするようにすることもあります。 ドライバー マネージャーはドライバー固有の接続属性をすべて認識しているわけではないため、ドライバー対応接続プールを使用しないと、このような種類のユーザー設定を効果的に指定することができません。 ドライバー対応接続プールを使用すると、ドライバーは (SQLSetConnectAttr のドライバー固有の属性を含めた) ユーザー設定を取得できるため、ユーザーの設定に基づいてプールから接続を再利用するコストをより適切に見積もることができます。

ドライバー対応接続プールの詳細については、「ODBC ドライバー対応接続プールの開発」を参照してください。

ドライバーのサポート有無の判断

ドライバー対応接続プールは、ドライバーがサポートしていない可能性があるオプションの機能です。 ドライバーがサポートしているかどうかを判断するには、SQLGetInfo のSQL_DRIVER_AWARE_POOLING_SUPPORTED InfoType を使用します。

ドライバー対応接続プールを有効にする方法

アプリケーションは、SQLSetEnvAttr で SQL_ATTR_CONNECTION_POOLING 属性を SQL_CP_DRIVER_AWARE に設定することで、ドライバー対応接続プールを使用できます。 ドライバーがドライバー対応接続プールをサポートしていない場合、ドライバー マネージャーの接続プールが使用されます (SQL_CP_DRIVER_AWARE ではなく、SQL_CP_ONE_PER_HENV が指定されている場合と同様です)。 ODBC 2.x および 3.x アプリケーションでは、この機能を有効にすることができます。

参照

ODBC ドライバーの開発