この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。
建築家
建築家
リスト
放送
茶屋
インテリジェントAI会話
.NETキャリア&テクニカルカレッジ
ちっちゃいなクズブログ
この版
利用者
Architect_Programmer_Code農業ネットワーク
»
建築家
›
プログラミング
›
.Net/C#
›
ADO.NET 入門チュートリアル(5)データベース接続プールの詳細説明...
眺める:
20385
|
答える:
0
[出典]
ADO.NET チュートリアル(5)データベース接続プールの詳細な説明
[リンクをコピー]
クズども
掲載地 2016/09/17 15:41:28
|
|
|
|
概要
今日はデータベース接続プールについてお話しします。 正直に言うと、アヒルの梨はとても大きいと言いました。 なぜなら、他のチャプターと比べてコネクションプールは比較的理解しにくいからです。 一番人気のある文で説明したいのですが、簡単なことではありません。 しかし、接続プールは特にマルチユーザープログラムを展開する際に非常に重要な知識ポイントです。 だから、話すだけでなく、徹底的に話さなければならない。 この記事を通じて、接続プーリングの基本と、すでにアプリケーションのパフォーマンス向上に活用されている方法を理解してもらえます。
目次
コネクションプールとは何ですか?
接続プールの仕組み
接続プールの非常に重要な特性について話しましょう
接続プールの例外と処理方法
接続状況を監視する方法
接続プールの効率的な利用の基本原理
1. コネクションプールとは何ですか?
前回の記事「ADO.NET あなたが知っておくべきこと(4)Taste Connection Objects」では、データベース接続の確立が非常に時間(時間)と労力(リソースを消費)する作業であることを強調しました。 これは、データベースサーバーへの接続には、物理的なチャネル(ソケットや名前付きパイプラインなど)を確立し、サーバーとの最初のハンドシェイクを行い、接続文字列情報を解析し、サーバーに接続を認証させ、現在のトランザクションに登録するためのチェックを実行するなど、いくつかの長いプロセスが必要だからです。 なぜそのような仕組みがあるのかは別として、必ず存在の理由があります。 新しいつながりを作るのがとても辛いなら、既存のものを再利用してみてはどうでしょうか?
実際、ADO.NET すでにコネクションプーリングという最適化手法を提示しています。 接続プールはそのようなコンテナの一つであり、データベースサーバーへの物理的な接続数を一定数収容します。 したがって、データベースサーバーに接続する必要があるときは、新しい接続を作成する代わりに、プール(コンテナ)から空き接続を取るだけで済みます。 これによりデータベース接続のオーバーヘッドが大幅に軽減され、アプリケーションのパフォーマンスが向上します。
PS:本来做了2张图片来描述连接池的,无奈公司装有监控软件,不能上传,所以只能等下次有时间上传了。
2. 接続プールの仕組み
2.1 接続プールの作成
接続プールはクラスに依存することに注意が必要です。 つまり、同じアプリケーションドメインが同時に複数の異なる種類の接続プールを持つことができます。 では、コネクションプールはどのように特定されるのでしょうか? 詳細には、プロセスを構成する署名、アプリケーションドメイン、接続文字列、そして(統合セキュリティを使用する場合)Windowsのアイデンティティによって区別されます。 しかし、同じアプリケーションドメインの場合、一般的には接続コードのみで識別されます。 接続が開放されると、ストリップ接続のタイプシグネチャが既存の接続プールと一致しない場合、新しい接続プールが作成されます。 それ以外の場合は、新しい接続プールは作成されません。
接続を作る典型的な例:
ログインが見えます。
上記の例では、3つのSqlConnectionオブジェクトを作成しましたが、管理に必要な接続プールは2つだけで済みました。 気をつける皆さん、すでにconn1とconn3は同じ接続文字列を持っているので、接続プールを共有していますが、conn2とconn1はconn3とは異なるため、新しい接続プールを作成する必要があります。
2.2 アイドル接続の割り当て
ユーザーが接続リクエストを作成したり、ConnectionオブジェクトのOpenを呼び出したりすると、接続プールマネージャーはまず、接続リクエストの型シグネチャに基づいて対応するタイプの接続プールを見つけ、その後空き接続を割り当てようとします。 詳細は以下の通りです。
プール内に利用可能な接続があれば、その接続を返してください。
プール内のすべての接続が尽きたら、プールに追加するための新しい接続を作成しましょう。
プール内の最大接続数に達した場合、リクエストは空き接続が空くまでの待機キューに入ります。
2.3 無効な接続の除去
無効な接続、つまりデータベースサーバーに正しく接続されない接続です。 接続プールの場合、データベースサーバーに保存される接続数には制限があります。 したがって、無効な接続が時間内に削除されなければ、接続プール内の空き容量が無駄になります。 実際、心配はいりません。接続プールマネージャーがこれらの問題を非常に丁寧に解決してくれています。 接続が長期間アイドル状態にある場合や、サーバーへの接続が切断されたと検出された場合、接続プールマネージャーはその接続をプールから削除します。
2.4 使用された接続のリサイクル
接続の使用を終えたら、接続を閉じるか解放して、接続をプールに戻して再利用できるようにしなければなりません。 接続はConnectionオブジェクトのClose or Disposeメソッド、またはC#のusing ステートメントを使って閉じることができます。
3. いくつかの非常に重要な特徴について教えてください
接続プールの挙動は接続文字列によって制御でき、主に4つの重要な特性を含みます。
接続タイムアウト:接続リクエストがタイムアウトを待つまでの時間です。 デフォルトは秒単位で15秒です。
最大プールサイズ:接続プール内の最大接続数。 デフォルトは100です。
最小プールサイズ:接続プール内の最小接続数。 デフォルトは0です。
Pooling: 是否启用连接池。ADO.NET默认是启用连接池的,因此,你需要手动设置Pooling=false来禁用连接池。
接続プールの性質を理解するために例を挙げましょう。 コードは以下の通りです:
ログインが見えます。
4. 接続プールの例外と処理方法
ユーザーが正しく、またはタイムリーに閉じずに接続を開くと、「接続漏れ」の問題がしばしば発生します。 リークされた接続はDisposeメソッドが呼び出されるまで開いたままであり、Garbage Collector(GC)が接続を閉じて解放します。 ADOとは異なり、ADO.NET 使用済みの接続は手動で閉じる必要があります。 重要な誤解として、接続対象が局所範囲外にあると接続が閉じられるというものがあります。 実際、スコープ外の場合、接続オブジェクトのみが解放され、接続リソースは解放されません。 では、まず例を見てみましょう。
ログインが見えます。
結果をより明確にするために、最大接続数を5に設定し、タイムアウト時間を1秒に設定しました。 走った後、以下の結果がすぐに得られます。
上記の結果から、接続に異常があることは明らかです。 接続プールの最大接続数は5つであることはすでにわかっており、6つ目の接続が作成されると、接続プールの最大接続数が最大に達し、空き接続がないため、タイムアウトするまで接続を待つ必要があります。 タイムアウト時間を超えると、上記の接続例外が発生します。 したがって、使用済みの接続はできるだけ早く適切に閉じて解放されるべきだと改めて強調しなければなりません。
5. SQL Server接続の状態を監視する方法
(1) アクティビティモニターを通じて
ステップ1:MSMSMマネージャーを開き、「アクティビティモニター」アイコンをクリックします。
ステップ2:Open Activity Monitorビューで「Processes」タブをクリックします。
ステップ3:#4 Connection Pool Exceptions and Handling Methodsの例を実行してください。下図のように5つのオープン接続が見えます。
(2) T-SQL文の使用
同様に、システムのストアドプロシージャsp_who実行することで、接続の状態も監視できます。
ログインが見えます。
6. 接続プールの効率的な利用に関する基本原則
接続プールをうまく活用することで、アプリケーションのパフォーマンスが大幅に向上します。 逆に、誤って使えば害はありません。 一般的に、以下の原則に従うべきです。
遅いタイミングで接続をリクエストし、できるだけ早く接続を解除してください。
接続を閉じるときは、まず該当するユーザー定義トランザクションを閉じてください。
接続プール内に少なくとも1つの接続が開かれていることを確実にし、維持してください。
プールのゴミは避けるようにしましょう。 これには主に、統合されたセキュリティによるプール断片化や、多数のデータベースを用いて生成されるプール断片化が含まれます。
ヒント:プールの断片化は多くのウェブアプリケーションでよく見られる問題であり、アプリケーションはプロセス終了までリリースされない多数のプールを作成することがあります。 この方法では、多数の接続が開放され、多くのメモリを消費し、パフォーマンスが低下します。
先の:
.net/c#はランダムな数字、カスタムの文字や数字のカウントを生成します
次に:
クッキーのHttpOnlyを設定するにはどうすればいいですか? HttpOnly は何に使われているのですか?
関連記事
•
.NET MySQL データベース接続文字列
•
IIS 7 アプリケーションプール自動リサイクルソリューション(シャットダウン用)
•
[SDLプログラミング] windosXPによるVC環境構築
•
.NET Coreのウェブサイトはドメイン名とポート設定を開始します
•
Linux/CentOSで.netコアコンソールプログラムを動かす[ソースコード]
•
固定名「System.Data.SQLite」ADO.NET プロバイダーに対してエンティティフレームワークのプロバイダーは見つかりませんでした。
•
MVC この仮想ディレクトリでは内容の一覧表示は許可されていません。
•
QQクイックログインプロトコルを分析し、「CSRF」を実装する
•
.shファイル実行エラー:-bash: xxx: /bin/sh^M: 悪いインタプリタ:そのようなファイルや指示はありません...
•
mvc キャッシュ OutputCacheプロパティの正しい使用方法VaryByParam
閲覧したセクション
安全な攻防
HTML/CSS/JavaScript
フロントエンドフレーム
発表情報
技術チャット
Node.js
ウェブサイト構築
PHP
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。
Mail To:help@itsvse.com