2012-03-08 19 views
2

かなり複雑なSQL Serverデータベース(多くのテーブルとたくさんのクエリで起こっている多数の結合)に支えられたASP.NET 2.0 Webアプリケーションがあります。私のログによると、ある特定のページタイプのサーバー側の読み込み時間が大幅に飛躍したことがわかります。通常は100ms以下でしたが、時には200ms前に上昇し、600ms以上になり、それ以来(ちょうど1週間以上前に)そこにいました。前回、新しいコードを本番環境に移行したのは、これが起こる2週間前でした。その日に大量の新しいデータはシステムに入れられませんでした。ASP.NET Webアプリケーションの突然のパフォーマンス低下。 DBインデックスが必要ですか?

私たちのテスト環境では、誤ったページタイプを見ましたが(これは当然、生産よりも軽いです)、450ms前後で平均化していました。それは変だ;私はテスト環境が本質的に同じデータセットを持っているので、生産よりも低速で実行することを期待しています。

ストアドプロシージャを呼び出して結果を.NETオブジェクトに集約するために200ミリ秒に近づいた1回のデータベース呼び出し(C#の1行)に絞りました(その時間の大半はDBにあります)。私はそのsprocをプルアップし、その本体をコピーして、SQL Server Managerに推定実行計画を教えてもらいました。それは、私が作成したノンクラスタード・インデックスがないことを私に教えてくれました。問題のデータベース呼び出しにかかる時間が100ms未満になった。いくつかの調査では、そのページタイプに他の重要なパフォーマンスシンクがないことが示されました。

私は少し改良を加えました。本番環境でそのインデックスを作成して、ページの読み込み時間が大幅に短縮されるかどうかを確認したいと思います。しかし、私はまだバグがあり、プロダクションで混乱する前に答えることをお勧めします。

  • なぜパフォーマンスが急に低下するのですか?単に欠落していたインデックスだった場合は、それがすべての要因であったと思います(データが追加されるにつれてパフォーマンスが徐々に低下する)。
  • 同じデータセットがある場合、テストはなぜ生産より優れているのでしょうか?

私のアプリについて誰も教えてくれないことは知っていますが、どのようなものがそのように変わる可能性があるのか​​、インストール固有のものかについてのいくつかの洞察を期待しています。

EDIT:インデックスをプロダクションに追加し、ページの読み込み時間を約100msに戻しました。私はまだ何が起こったのか分かりません。おそらく、いつかデータベースとSQLに関して無関係なものを学ぶと、いつかクリックされるでしょう。

+1

DBサーバーの作業が少なくて済むという理由以外の理由がない場合は、テスト環境のパフォーマンスが向上すると思います。 –

+2

突然の変更は、Queryオプティマイザがある時点で新しい実行計画を使用することを選択したためです。たぶんサイズ/行数のために、古い計画が突然実行不能になり、クエリオプティマイザは新しい戦略を選択する必要がありました。 –

+0

@KirkWoll:私は、テスト環境が生産と同じデータと少量のテストデータを持っていることに注意するように質問を更新しました。 –

答えて

1

MSSQLでの実行計画のパフォーマンスは予測するのが複雑です。欠落している索引は、表のサイズの2乗で実行時間を増加させる可能性があります。それは、それが作品、作品、作品のように見えるようになり、突然痛みを伴って遅くなる。

マネージメントスタジオが欠落しているインデックスを示している場合は、それをプロダクション環境に追加する必要があります。

まだ、ASPページで実行されるspのための100msはかなり長いです。ページが大量に使用されている場合は、spを最適化してみてください。

+0

私は、テスト環境が生産と本質的に同じデータセットを持っていることに注意するように質問を更新しました。 –

関連する問題