(申し訳ありませんが、これは本当に長い質問ですが、具体的であると言われています)ASP.NET 2.0-4.0 Webアプリケーションの初期起動が非常に遅い。
私が働いている会社は、問題なくしばらくの間実行されている多数のサイトを持っています。アプリケーションは、ASP.NET 2.0、3.5、および4.0を組み合わせたもので、すべてADO.NETを使用してIIS7でホストされているSQL Server標準インスタンス(同じWebサーバー上)に接続します。
問題は、アップグレードされたWebサーバーに移動したときに始まりました。私たちは、サーバ、dbインスタンス、IISをまったく同じ設定(異なるマシン名とSQLExpressからStandardにアップグレードしたという事実を除く)でセットアップするよう努力しました。 。どちらのサーバーもWindows Server 2008 R2(現在のすべての更新が適用されています)を実行しており、既定のインストールを受け取りました。
これらのアプリケーションのいずれかを起動すると、この問題が非常に顕著になります。アプリケーションのログインページに達すると、ページ自体が非常に高速に読み込まれます。これは、ページがキャッシュされていない可能性のある新しいマシンからページをロードしても、IISのキャッシュを無効にしても同じです。この問題は、ログイン情報を入力してログインボタンをクリックすると実際に表示されます。理論的には最大150個の別個のデータベースにアクセスする必要がありますが、実際には通常は2です。この問題は最小限のデータベースが2つしか開いていない場合でも発生します。素晴らしいデザインではありませんが、私たちは今のところそれと一緒に生活しなければなりません。
データベースへの接続を最初に開こうとすると、2 dbsまたは40に接続しているかどうかにかかわらず、毎回約20秒間プロセスが停止します。.NETプロファイラ(jetbrains dottrace)プロセス、およびそれから取得できる唯一の情報は、sqlconnection.open()への呼び出しの1つまたはすべてが90%の時間を占めていたということでした。これはアプリケーションの初回使用時にのみ発生しますが、IISが設定したリサイクル設定を無視して数分待ってからアプリケーションをリサイクルして問題が再び発生する。
また、SQL Serverプロファイラを使用して、どのデータベース操作が減速の原因であるかを確認しようとしましたが、他のすべてのDBアクティビティ(および本番サーバーでこれを行う必要があったという事実問題は私たちのテスト環境では起こりません)私は停止を引き起こしていた正確な操作をピン止めできませんでした。私は夜遅くに入ってSQLプロファイラを実行するために本番サイトをシャットダウンしようとしますが、すぐにこれを行うことはできません。
問題を調査の過程で、私はそれが名前解決の問題があるかもしれない考えのカップルのソリューションに
を試してみましたが、私が変性するホストのウェブサーバ上のファイルなどのconnectionStringsを与えるの両方を試してみました解決するサーバー名の代わりにIPアドレス、違いはありません。私はこのような問題を引き起こすLLMNRプロトコルについて聞いたことがありますが、私はIPで接続しようとしたり、ホストファイルで解決しようとするとその可能性がなくなったはずです。
IISでアイドルタイムアウト、リサイクル間隔などを増やしましたが、これは尊重されていないように見えます。これは、マシン上のIISアプリケーション設定を上書きする設定があると信じさせます。
他にも複数のコード修正がありますが、いずれも違いはありません。 SqlServerの設定で問題が発生していますか?
他のものは私が今忘れてしまったものです。
この問題を解決するのに役立つアイデア、エクスペリエンス、またはwhitversがあります。
速度に違いがあるかどうかを確認するために、古いSQLExpress DBに接続しようとしましたか?テスト(単純なSQLのもの)として1 dbに接続するのはどうですか? – webdad3
残念ながら、私たちは、古いインスタンスに接続するオプションがありません。いったん新しいサーバーを稼働させたら、古いサーバーをフォーマットし、何か別のものに再利用しました。たとえインスタンスがまだ存在していても、私たちのシステムを物理的に配備しても、両端のファイアウォールやその他のものではなく、古いサーバーに接続することはできません。 – Caleb