5

奇妙なパフォーマンスの問題が発生しており、誰かが私たちを正しい方向に向けることができることを願っていました. 私たちのシナリオは、(このアプリケーション専用の高スペックのサーバー) を使用するASP.NET MVC C#Web サイトです。EF4 POCOIIS 7

明らかに、予期される application_startup では遅いですが、ロードが完了すると、サイトをナビゲートでき、すべてが素晴らしく、0.5 ミリ秒のページの読み込みが速くなります (私たちは を使用していますMini-Profiler)。たとえば、サイトの使用を 5 ~ 10 分間停止すると (アプリケーション プールのリサイクルを 2 時間に設定し、ログに記録しているため、リサイクルされていないことがわかります)、最初のページの読み込みは途方もなく遅く、10 - 15 秒かかりますが、問題なく (0.5 ミリ秒) 再びナビゲートできます。

これはSQL queries、まだ実行されていない場合でも、最初のページがヒットした後はすべてのクエリが正常に機能しているように見えるため、遅いわけではなく、どこにもキャッシュされていません。

私たちは膨大な量のテストを行いましたが、これを理解することはできません. 私がこれまでに試した主なことは、EFビューを事前に生成することですが、これは役に立ちませんでした。

Sql Sql Server ProfilerServer Profiler でのアクティビティがなく、サイトとのやり取りがない状態で 5 分間ギブまたは 30 秒かかると、アプリケーションに対していくつかの「監査ログアウト」エントリが表示され、それが発生するとすぐに 10 から 15 かかるようです。数秒でアプリケーションを更新します。にアイドル タイムアウトはありSql Serverますか?

4

8 に答える 8

5

接続文字列で以下を使用すると、これが機能するはずです。

server=MyServer;database=MyDatabase;Min Pool Size=1;Max Pool Size=100

これにより、接続プールが常に少なくとも 1 つの接続を維持するようになります。これ(永続的な接続)はお勧めしませんが、問題は解決します。

于 2012-06-20T14:29:24.667 に答える
2

LMHOSTS ファイルを使用していますか? 同じ問題がありました。デフォルトでは、LMHOSTS ファイル キャッシュは 10 分後に有効期限が切れます。システムが 10 分間アイドル状態になった後、ホストは LMHOSTS ファイルをリロードする前にブロードキャスト メッセージを使用し、遅延を引き起こします。

于 2012-10-01T21:45:45.600 に答える
1

Sql Server Profiler でアクティビティがなく、サイトとのやり取りがない状態で 5 分間ギブまたは 30 秒かかってから Sql Server Profiler を見た後、アプリケーションに対していくつかの「監査ログアウト」エントリが表示され、それが発生するとすぐに時間がかかるようですアプリケーションの更新には 10 ~ 15 秒かかります。SQL Server にアイドル タイムアウトはありますか?

これは、アプリケーションではなく、SQL サーバーや SQL サーバーへの接続に問題がある可能性が高いことを示しています。SQL サーバーは接続プールを使用し、SQL はこれらのプールを頻繁に清掃してクリーンアップします。発生しているように見える遅延は、接続プールがクリーンアップされ (監査ログアウト)、新しい接続を確立する必要がある場合です。私はあなたのSQLデータベースの人々と話したり仕事をしたりします。

テストのために、本番アプリと同じ SQL サーバーで実行されていないデータベースのローカル/開発コピーにアクセスできますか? そうでない場合は、1 つのセットアップを試してみて、同じ問題が発生するかどうかを確認してください。

于 2012-06-18T18:44:45.917 に答える
0

遅いのは最初の実行 (アプリごと?) であるため、EDMX または LINQ の SQL へのコンパイルが発生している可能性があります。

可能な解決策:

  1. プリコンパイルされたビューとプリコンパイルされたクエリを使用します (多くのリファクタリングが必要になる場合があります)。
    http://msdn.microsoft.com/en-us/library/bb896240.aspx
    http://blogs.msdn.com/b/dmcat/archive/2010/04/21/isolating-performance-with-precompiled-pre - generated-views-in-the-entity-framework-4.aspx
    http://msdn.microsoft.com/en-us/library/bb896297.aspx
    http://msdn.microsoft.com/en-us/magazine /ee336024.aspx

  2. アプリの起動時にすべてのクエリをドライランします (最初のリクエストを受信する前)。
    デフォルトの接続文字列 (空のデータベースでもかまいません) で偽の入力 (存在しないゼロ キーなど) を使用してクエリを実行できます。例外をスローしないようにしてください (Single() の代わりに SingleOrDefault() を使用し、.ToList() で null の結果と長さ 0 のリストの結果を処理します)。

于 2012-06-17T13:18:19.943 に答える
0

「Select getDate()」などの簡単なクエリを使用して SQL Server にアクセスする単純な Web ページを作成します。次に、Pingdom や他のモニターなどの外部サービスを使用して、30 秒ごとにそのページにアクセスします。これにより、接続が暖かく保たれるはずです。

于 2012-06-19T02:43:08.800 に答える
0

次の例のように、web.config でタイムアウトを上書きしてみてください。

Data Source=mydatabase;Initial Catalog=Match;Persist Security Info=True
;User ID=User;Password=password;Connection Timeout=120

機能する場合、これは解決策ではありません..単なる回避策です。

于 2012-06-20T01:45:00.220 に答える
0

SQL Server に対して「SQL Server Profiler」を実行し、5 ~ 10 分間アイドル状態になった後にサイトにアクセスして問題を再現しながら、新しいトレースをキャプチャします。その後、トレースを見てください。具体的には、ApplicationName が "EntityFramework..." で始まるエントリを探します。これにより、その時点で EF が何をしているかがわかります。EF 上のカスタム キャッシュ、または有効期限が切れるセッション状態に問題がある可能性があります (web.config で sessionState タイムアウトを確認してください)。

于 2012-05-22T13:17:00.407 に答える