2016-06-28 24 views
1

最近、私はsqlデータベースのアクティビティを監視しました。アクティビティの監視で約400のプロセスが見つかりました。後で、物理的にもクリアされない接続文字列オブジェクト私は完全に閉鎖して処分しましたが、一度IISを停止すると、活動監視のプロセスがすべて消えてしまいます。私は、ウェブサーバー上のそれの影響については本当に心配ですSMSSからのすべての無用のプロセスが殺されることになるように、私は、アプリケーションプールからの私のすべての接続をきれいにすることができることを見出したが、SqlConnection.ClearPool()がWebサーバー(IIS)のパフォーマンスに与える影響

少し検索した後

。このアプローチがSMSSから役に立たないタスクを明らかにするであろうことは事実ですが、すべての要求に対して新しい接続が実際に作成されるべきです。

私のアプリケーションは、多くのリクエストを処理するはずのエンタープライズアプリケーションだと考えると、このアプローチを使用してIISサーバーをダウンさせることを恐れています。

接続文字列の値がすべての要求に対して完全に固定されていないことに注意してください。リクエスタ情報を取得する目的で、要求パラメータに応じてすべての要求でその "アプリケーション名" SQLアクティビティモニタリングとSQLプロファイラで。

は、このアプローチでのパフォーマンスの遅れが、私は私のログ戦略を変更する必要があるか、それはほんの少し遅くなりますように厳しいです私の事業範囲を考慮するか、私が他の単語での接続文字列値を修正する方が良いでしょう、そうすることは価値があります???

+0

プールを操作しようとするとパフォーマンスが低下し、コードが接続をリークするという兆候です。プール内の多くの接続は問題ではなく、新しい接続要求がサーバーをすばやく取得することを意味します。彼らは何も消費しない*。一方、400のアクティブな接続は、コードが接続を閉じるのを忘れることを意味します。プールを忘れる。コードを確認してください –

+0

プールを空にするには、接続文字列を変更します。そんなにしないでください。あなたはプールをクリアするべきではなく、ADO.Netはそれをうまく処理します。遅くなるのはIISではなく、データアクセスです。プールではなくデータベースを管理しているのはADO.Netです。 – Crowcoder

+0

BTW接続文字列は接続とは関係ありません。彼らは単なる弦です。コネクションプーリング*はエンタープライズ機能です。コネクションができるだけ早く解放されれば、わずか20個のプールされたコネクションで400個のWebリクエストを処理できます。 –

答えて

1

私の接続文字列の値がすべての要求に対して完全には固定されていないことに注意してください。リクエスタを取得するために、リクエストパラメータに応じてすべての要求でその "アプリケーション名" SQLアクティビティ監視とSQLプロファイラの情報

これはプーリングを強制終了するため、これは本当に悪いことです。プーリングを無効にすることもできますが、パフォーマンスペナルティがかかります(これはすでに支払っています)。

しないでください。監視情報を別の方法で入手する。

さらに、SQL Serverも.NETも400接続で問題がありません。それは異常に高いですが、問題を引き起こすことはありません。

アプリの複数のインスタンスを実行すると(HAの場合など)、これが増えます。制限は30kです。私はこれがアプリケーションの減速を引き起こす理由は何も認識していませんが、それはあなたの監視ツールに問題を引き起こすかもしれません。

関連する問題