接続プール - モバイル アプリケーション開発、Web サービス、SOA アーキテクチャ - テクノロジー
コンテンツにスキップ

接続プーリング - モバイルアプリ開発、Webサービス、SOAアーキテクチャ

広告

接続プーリングとは何ですか?

接続プーリングを使用すると、既存の接続を再利用できるため、同じ構成の接続を継続的に作成および削除することによるオーバーヘッドが軽減されます。つまり、同じ接続文字列と資格情報を使用する接続を開いたり閉じたりすると、プール内の使用可能な接続を再利用できます。一般的なアプリケーションは、同じ接続オブジェクトを使用してデータベースからデータを継続的にフェッチし、更新します。接続プーリングは、データベースが常に接続を作成および削除する必要をなくすことで、より高いレベルのパフォーマンスを提供します。接続プールは、プロセス、アプリケーション ドメイン、および接続文字列によって分離されます。統合セキュリティを使用する接続文字列の場合、一意の ID ごとに別個のプールが作成されます。

接続プーリング オプションの制御

ADO.NET 接続オブジェクトを作成するとき、接続プーリングはデフォルトでオンになります。接続プーリングに特定の接続文字列キーワードを設定することで、接続プーリングの動作を制御 (または接続プーリングを完全に無効化) できます。たとえば、接続プーリングを特に無効にするには、接続文字列で Pooling=False を設定します。表 5-7 に、特定の接続が接続プールと対話する方法を制御するために使用できる接続文字列キーワードのリストを示します。すべてのキーワードがすべてのプロバイダーで使用できるわけではありません。たとえば、OLE DB プロバイダーは、接続文字列内の OLE DB Services キーワードに設定された値に基づいて、接続プーリング (リソース プーリングまたはセッションとも呼ばれます) を追跡します。

テーブル接続プールの接続文字列接続プーリングの動作を制御する接続文字列プロパティに加えて、接続プーリングにも影響を与える可能性がある接続オブジェクトで使用できるメソッドもあります。使用可能なメソッドは通常、アプリケーション内の接続を閉じるときに、再度使用されないことがわかっている場合に使用されます。これにより、接続が閉じられたときに接続をプールに戻すのではなく、破棄することで接続プールがクリーンアップされます。すでにプール内にあり開いている接続は、次回閉じられるときに破棄されます。表 5-8 に、接続プールとの対話に使用できるメソッドを示します。

接続プーリングを使用するように接続を構成する

既定では、ADO.NET で使用できるすべての .NET Framework データ プロバイダーでは接続プーリングが有効になっていますが、接続プーリングの操作に使用できる制御のレベルは、使用されているプロバイダーによって異なります。

SQL Server 接続を使用した接続プーリングの構成

デフォルトでは、SqlConnection オブジェクトは接続プーリングを自動的に使用します。一意の接続文字列を使用して Sqlconnection.Open を呼び出すたびに、新しいプールが作成されます。表 5-7 で説明したように、接続文字列に接続プール キーワードを設定することで、接続プーリングの動作を制御します。たとえば、最小プール サイズを設定したい接続を考えてみましょう。 Mîn Pool Size キーワードにゼロより大きい値を割り当てると、アプリケーションが終了するまでプールが破棄されなくなります。最小プール サイズを 5 に設定するには、次のような接続文字列を使用します。

データ ソース=Sqlサーバー名;初期カタログ=データベース名;統合セキュリティ = True、最小プール サイズ = 5

デフォルトでは、最小プール サイズは 0 です。これは、要求に応じて各接続を作成して初期化する必要があることを意味し、接続文字列の最小プール サイズを増やすと、指定された数の接続が作成されて使用できるようになり、時間を短縮できます。これらの初期接続で接続を確立するのに時間がかかります。

Oracle Connections を使用した接続プーリングの構成

.NET Framework Data Provider for Oracle を使用した接続では、デフォルトで接続プーリングが自動的に使用されます。接続文字列キーワードを設定することで、接続でプーリングを使用する方法を制御できます。表 5-10 は、接続プーリング アクティビティの変更に使用できる接続文字列キーワードの詳細を示しています。

接続エラーの処理

SQL Server が警告またはエラーを返すと、.NET Framework Data Provider for SQL Server は SqlException を作成してスローします。これをアプリケーションでキャッチして問題を処理できます。 SqlException がスローされた場合は、SqlException.Errors プロパティを調べて、SQL サーバーから返されたエラーのコレクションにアクセスします。 SqlException.Errors プロパティは、常に少なくとも 1 つの SqlError オブジェクトを含む SqlErrorCollection クラス (SqlError クラスのコレクション) です。

詳細 SQL Server エラー

SqlConnection は、重大度レベルが 19 以下のメッセージに対しては開いたままになりますが、重大度が 20 以上になると通常は自動的に閉じます。

まとめ

  • 接続プーリングはデフォルトで有効になっています。
  • 接続プーリング オプションは、Windows の ODBC データ ソース アドミニストレータ ダイアログを使用する ODBC プロバイダーを除き、接続文字列で定義されます。
  • SqlException オブジェクトは、SQL サーバーでエラーが検出されたときに作成されます。
  • SqlException 例外の各インスタンスには、実際のサーバー エラー情報を含む SqlError 警告が少なくとも 1 つ含まれています。
  • Windows 認証 (統合セキュリティとも呼ばれます) は、データに安全に接続するために推奨される方法です。
  • 機密情報を含む接続文字列をアプリケーションの構成ファイルに保存し、機密情報を含むすべての設定を暗号化します。