3

最近、パフォーマンスに悪影響を与える可能性のあるいくつかのSQLServerビューにいくつかの変更を加えました。これらのビューに対していくつかのパフォーマンステストを実行して、それらにどのように影響したかを確認することにしました。結果は驚くべきものでした。

下のグラフは、実行したパフォーマンステストの結果を示しています。グラフの内容は次のとおりです。

  • 青い線は、変更が行われる前のビューです。
  • 赤い線は、変更が行われた後のビューを示しています。
  • x軸は、ループ内の反復を表します。
    • 反復ごとに、1000個の新しいレコードが挿入されます(ビューが返されます)。
    • 反復ごとに、テストしているビューからいくつかの選択を行い、結果を平均します。
  • y軸は、ビューが結果を返すのにかかる時間を表します
  • パフォーマンステストされたselectステートメントには、毎回100レコードのみを返すwhere句が含まれていました。(テスト中に各名前に100レコードが挿入されました)。

結果は、私たちが間違いなくパフォーマンスに打撃を与えたことを示していますが、私たちを困惑させるのは、データベースで約40,000レコードに達すると、パフォーマンスが大幅に向上することです。このテストはいくつかの異なるサーバーで実行され、毎回同様の結果が得られます。

なぜこれが起こっているのかについて誰かが洞察を与えることができるかどうか疑問に思います。40,000のレコードレベルを超えたときに、なぜパフォーマンスが大幅に向上するのでしょうか。誰かが以前にこのようなものを見たことがありますか?なんらかの理由で探してみましたが、手ぶらで出てきました。

ビューの調整、インデックスの操作、インデックスの再構築と再編成、実行プランの分析などを試みましたが、これを引き起こす原因はこれまでのところ見つかりませんでした。

パフォーマンスの表示

どんな助けや洞察も大歓迎です。ありがとう。

4

2 に答える 2

3

他のパフォーマンス調査と同じように、これに取り組む必要があります。適切な方法論と測定を使用してください。待機とキューも、ボトルネックを特定するための方法論として貴重です。関連する指標を特定して測定すると、何が起こっているのかを答えることができます。

今のところ、応答時間を測定しただけで、実際に費やした時間のデータはありません。提示された単一の実際のデータポイント(収集されたメトリック、他の人が試みるためのテスト仕様など)を使用しない場合、クライアントコード、ロックの競合、ファイルの増加、ログの増加、インデックスの統計、クエリプランなど、あらゆる説明が正しい可能性を持って冒険することができます。変更、ヒューマンエラー、グレムリン、月の光線、そしてもちろん、私のお気に入り:断片化

したがって、適切な分析と調査を行って関連するメトリックを収集するか、正確なテスト(再現スクリプト、方法論)を投稿して、自分自身を測定できるようにします。

于 2012-05-03T20:42:46.190 に答える
1

関連するテーブルの統計を更新してみましたか。

おそらく、統計が古く、使用されたプランが行数に対して間違ったプランでした。

于 2012-05-04T00:25:42.580 に答える