最近、パフォーマンスに悪影響を与える可能性のあるいくつかのSQLServerビューにいくつかの変更を加えました。これらのビューに対していくつかのパフォーマンステストを実行して、それらにどのように影響したかを確認することにしました。結果は驚くべきものでした。
下のグラフは、実行したパフォーマンステストの結果を示しています。グラフの内容は次のとおりです。
- 青い線は、変更が行われる前のビューです。
- 赤い線は、変更が行われた後のビューを示しています。
- x軸は、ループ内の反復を表します。
- 反復ごとに、1000個の新しいレコードが挿入されます(ビューが返されます)。
- 反復ごとに、テストしているビューからいくつかの選択を行い、結果を平均します。
- y軸は、ビューが結果を返すのにかかる時間を表します
- パフォーマンステストされたselectステートメントには、毎回100レコードのみを返すwhere句が含まれていました。(テスト中に各名前に100レコードが挿入されました)。
結果は、私たちが間違いなくパフォーマンスに打撃を与えたことを示していますが、私たちを困惑させるのは、データベースで約40,000レコードに達すると、パフォーマンスが大幅に向上することです。このテストはいくつかの異なるサーバーで実行され、毎回同様の結果が得られます。
なぜこれが起こっているのかについて誰かが洞察を与えることができるかどうか疑問に思います。40,000のレコードレベルを超えたときに、なぜパフォーマンスが大幅に向上するのでしょうか。誰かが以前にこのようなものを見たことがありますか?なんらかの理由で探してみましたが、手ぶらで出てきました。
ビューの調整、インデックスの操作、インデックスの再構築と再編成、実行プランの分析などを試みましたが、これを引き起こす原因はこれまでのところ見つかりませんでした。
どんな助けや洞察も大歓迎です。ありがとう。