クエリのパフォーマンスを最適に測定するにはどうすればよいですか?


19

2つのストアドプロシージャがあり、2番目のストアドプロシージャは最初のストアドプロシージャの改良版です。

どれだけ改善されているかを正確に測定しようとしています。

1 / clock time実行時間が異なるため、測定はオプションではないようです。さらに悪いことには、2番目のストアドプロシージャの実行時間が、2番目のストアドプロシージャの実行時間よりも長い場合があります(まれに起こります)(その瞬間のサーバーのワークロードによると思います)。

2 / Include client statisticsは、異なる結果も提供します。

3 / DBCC DROPCLEANBUFFERSDBCC FREEPROCCACHE良いですが、同じ話...

4 / SET STATISTICS IO ONはオプションかもしれませんが、ストアドプロシージャに多くのテーブルが関係しているので、どうすれば総合スコアを取得できますか?

5 / Include actual execution planもオプションです。estimated subtreecost最初のストアドプロシージャで0.3253を取得し、2番目のストアドプロシージャで0.3079 を取得します。2番目のストアドプロシージャは6%高速(= 0.3253 / 0.3079)と言えますか?

6 / SQL Server Profilerの「読み取り」フィールドを使用していますか?

では、実行条件(サーバーのワークロード、これらのストアドプロシージャが実行されるサーバーなど)に関係なく、2番目のストアドプロシージャが最初のプロシージャよりもx%高速であると言えますか?

それが不可能な場合、2番目のストアドプロシージャの実行時間が最初のストアドプロシージャよりも優れていることをどのように証明できますか?

回答:


17

前と後のシナリオを比較するときに、SQLQueryStress無料ツールを使用するのが好きです。SQLQueryStressを使用すると、各ストアドプロシージャを何度でも実行でき、すべての実行の合計平均統計を取得できます。

たとえば、各ストアドプロシージャを100回実行してから、統計を使用して改善点をバックアップできます。「実行回数が100回を超えると、私の改善により合計で30秒節約され、ストアドプロシージャの実行あたりの読み取り回数は1500回少なくなります。」あなたはそのアイデアを得ると思います。

ストアドプロシージャにパラメーターがある場合は、多くの異なるパラメーターセットで改善が機能することを再確認することをお勧めします。SQLQueryStressは、ストアドプロシージャがどのように実行されるかについての全体像をより良く把握するために、クエリ内のパラメーターを置換できるようにすることで、いくつかのクールなことを行います。

SQLQueryStressドキュメント:http ://www.datamanipulation.net/sqlquerystress/documentation/documentation.asp

SQLQueryStress



3

2つのストアドプロシージャの実行時間を数日間にわたって収集したら、このホームページを使用することをお勧めします。

http://www.evanmiller.org/ab-testing/t-test.html

それらが実際に異なるかどうかを確認します。

ストアドプロシージャの改善に関しては、6%の違いはそれほど聞こえません。私は同僚に2桁の大きさを期待するようになりましたが、彼が1桁しか達成しない場合は失望するふりをします...

彼は、自分のソリューションがより速く機能することを証明するためにEvanMillerホームページを使用する必要はありません。

また、SQLSentrys(編集:) Plan Explorerをhttp://www.sqlsentry.com/からインストールします。これは、実行計画を比較するための非常に改善されたツールであるためです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.