asp.netデータベース接続池を簡単に分析します。

4040 ワード

1,ASP.NETデータベース接続池には、名前のセット-値ペアを使用して、リンク文字列としてリンク槽を配置することができます。例えば、プールが有効かどうか(デフォルトでは有効)を設定してもよく、リンクを開くための待ち行列要求が遮断された時間は、池の最大、最小容量である。以下の例の文字列は池の最大容量と最小容量を構成しています。
"Server=(local);Integrated Security=SSPI;Database=Northwind;
Max Pool Size=75;Min Pool Size=5"
AS.NETデータベース接続池の概要
接続池は、各接続要求のために接続を再確立する必要はなく、アプリケーションが接続池から接続を取得し、この接続を使用することができます。新しい接続が作成され、接続池に置かれると、アプリケーションはデータベース接続全体の作成プロセスを実行する必要なく、この接続を繰り返し使用することができる。
アプリケーションが接続を要求すると、接続池はアプリケーションに接続を再確立する代わりに割り当てられる。アプリケーションが接続を完了すると、接続は直接的にリリースするのではなく、接続池に返されます。
2,
接続池の新規接続を減らすには、開く回数が必要です。プールプロセスは物理的接続の所有権を保持します。接続は、所与の接続構成ごとにアクティブな接続のセットを保持することによって管理される。ユーザーが接続上のOpenを使うと、池のプロセスは池の中に利用可能な接続があるかどうかを確認します。ある池の接続が利用可能であれば、新しい接続を開く代わりに、この接続を使用者に返します。アプリケーションがこの接続上Closeを呼び出すと、プールプロセスは接続をアクティブな接続プールのセットに戻します。本当に接続を閉じるのではありません。接続が池に戻ったら、次のOpen呼び出しで繰り返し使用できます。
同じ設定の接続のみがプール接続を確立することができます。ADO.NETは複数の池を同時に保持し、各池を配置する。接続は、接続文字列およびWindows識別子(統合されたセキュリティを使用する場合)によって複数のプールに分けられます。
プール接続は、アプリケーションの性能とスケーリング性を大幅に向上させることができます。デフォルトでは、ADO.NETで接続池を有効にします。明示的に無効にしない限り、アプリケーションに接続して開いたり閉じたりすると、プールプロセスは接続を最適化します。いくつかの接続文字列修飾子を提供して、接続池の挙動を制御しても良いです。
プールの作成と割り当て
最初の接続を開くと、完全一致アルゴリズムに基づいて接続中の接続文字列とプールを作成します。各接続池は異なる接続文字列と関連しています。新しい接続を開くと、接続文字列が既存のプールと完全に一致していない場合、新しいプールが作成されます。プロセス別、アプリケーションドメイン別、接続文字列別、および(統合されたセキュリティを使用する場合)Windowsの表示に従ってプール接続を確立します。
以下のC铉例では、三箇新のSql Connectionオブジェクトを作成しましたが、管理には2つの接続池が必要です。なお、Initial Catalogに割り当てられた値によって、最初と第二の接続文字列が異なる。
 
  
using (SqlConnection connection = new SqlConnection(
"Integrated Security=SSPI;Initial Catalog=Northwind"))
{
connection.Open();
// Pool A is created.
}
using (SqlConnection connection = new SqlConnection(
"Integrated Security=SSPI;Initial Catalog=pubs"))
{
connection.Open();
// Pool B is created because the connection strings differ.
}
using (SqlConnection connection = new SqlConnection(
"Integrated Security=SSPI;Initial Catalog=Northwind"))
{
connection.Open();
// The connection string matches pool A.
}
MinPoolSizeが接続文字列に指定されていない場合、または0に指定されていない場合、プール内の接続は一時的にアクティブでないとオフになります。ただし、指定されたMinPoolSizeが0より大きい場合、App Domainがアンインストールされ、プロセスが終了する前に、接続池は破壊されません。非アクティブまたは空のプールのメンテナンスは、少なくともシステムオーバーヘッドが必要です。
接続を追加
接続プールは、個々の固有の接続文字列のために作成されます。池を作成すると、複数の接続先を作成し、池に追加して、最小池サイズの要求を満たすことができます。接続は必要に応じてプールに追加されますが、指定された最大プールサイズ(デフォルトは100)を超えてはいけません。接続はクローズまたは切断時にプールに戻します。
Sql Connectionオブジェクトを要求する場合、利用可能な接続があれば、そのオブジェクトをプールから取得します。接続が利用可能であるには、未使用である必要があります。対応するトランザクションコンテキストを持っているか、またはトランザクションコンテキストに関連していないか、サーバとの有効なリンクを持っています。
接続池プロセスは、接続がプールに解放されたときに接続を再割り当てすることにより、これらの接続要求を満たす。最大のプールサイズに達し、利用可能な接続がない場合、この要求はキューに入れられます。その後、プールプロセスはタイムアウト時間(標準値は15秒)に達するまで、どのような接続を再確立するかを試みます。プールプロセスが接続のタイムアウト前に要求を満たしていないと異常を起こします。
接続を削除
接続池プロセスは定期的に接続池をスキャンし、CloseまたはDisposeを通じてオフになっていない未使用の接続を検索し、見つかった接続を再確立する。アプリケーションが明示的にオフまたはオフしていない場合、接続プールプロセスは接続を再確立するために長い時間を必要とするかもしれないので、接続中にCloseとDisposeを明示的に起動することを確保したほうがいいです。
接続が長時間アイドル状態になったり、サーバとの接続が切断されていることが池プロセスによって検出されたりすると、その接続はプールから削除されます。なお、切断された接続は、サーバとの通信を試みた後にのみ検出される。ある接続がサーバに接続されていないと発見した場合、無効としてマークされます。無効な接続は停止または再確立後のみ接続プールから削除されます。
消えたサーバとの接続があった場合、接続池管理プログラムが切断された接続を検出しなくても無効としてマークし、この接続を池から取り出すことができます。この場合、接続がまだ有効かどうかを確認するシステムオーバーヘッドは、サーバとの別の往復をもたらし、池プロセスの利点を相殺するためである。このような場合、初めてこの接続を使って接続が切断されたかどうかを検出し、異常を起こします。
ASP.NETデータベース接続池のメリット
接続池を使う一番の長所は性能です。新しいデータベース接続を作成するのにかかる時間は、ネットワークの速度とアプリケーションとデータベースサーバの距離に依存します。そして、このプロセスは通常時間がかかります。データベース接続池を採用すると、データベース接続要求は直接に接続池を通じて満たされ、この要求のためにデータベースサーバに再接続、認証する必要がないので、時間が節約されます。
ASP.NETデータベース接続池の欠点
データベース接続池には、使用されていない複数の接続がデータベースに接続されている可能性があります。これは資源の浪費を意味します。
ヒント
1.データベース接続が必要なときは、接続池を作成します。接続が終わったら、すぐに閉じてください。ごみ収集器で処理しないでください。
2.データベース接続をオフにする前に、すべてのユーザ定義のトランザクションを確実にオフにします。
3.データベース内のすべての接続を閉じないでください。少なくとも接続池の中に接続があることを保証します。メモリと他のリソースが最初に考慮しなければならない問題であれば、すべての接続をオフにして、次の要求が来たら接続プールを作成します。