如何最好地衡量查询性能?


19

我有2个存储过程,其中第二个存储过程是第一个存储过程的改进。

我正在尝试确切地衡量这是多少改进。

1 /测量clock time似乎不是一种选择,因为我得到不同的执行时间。更糟糕的是,有时(很少,但确实会发生)第二个存储过程的执行时间大于第一个存储过程的执行时间(我想是由于当时服务器的工作量)。

2 / Include client statistics也提供不同的结果。

3 / DBCC DROPCLEANBUFFERSDBCC FREEPROCCACHE是不错的,但同样的故事...

4 / SET STATISTICS IO ON可能是一种选择,但是由于我的存储过程中涉及许多表,我如何获得总体得分?

5 / Include actual execution plan也可以选择。estimated subtreecost对于第一个存储过程,我得到0.3253,对于第二个存储过程,我得到0.3079。我可以说第二个存储过程快了6%(= 0.3253 / 0.3079)吗?

6 /是否使用SQL Server Profiler中的“读取”字段?

那么,无论执行条件如何(服务器的工作负载,执行这些存储过程的服务器等),我怎么能说第二个存储过程比第一个过程快x%?

如果不可能,如何证明第二个存储过程比第一个存储过程有更好的执行时间?

Answers:


17

在比较之前和之后的场景时,我喜欢使用SQLQueryStress免费工具。使用SQLQueryStress,您可以根据需要多次执行每个存储过程,并获取所有执行的总平均统计信息。

例如,您可以执行每个存储过程100次,然后使用统计信息来备份您的改进。“超过100次执行,我的改进总共节省了30秒,并且存储的proc每次执行的读取次数减少了1500次。” 我想你应该已经明白了。

如果存储的过程中有参数,则最好反复检查您的改进是否适用于许多不同的参数集,这始终是一个好主意。SQLQueryStress通过允许您替换查询中的参数来获得一些很棒的功能,以更好地了解存储过程的性能。

SQLQueryStress文档:http ://www.datamanipulation.net/sqlquerystress/documentation/documentation.asp

SQLQueryStress



3

当您收集了两个存储过程在两天内的执行时间后,建议您使用此主页

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

看看它们是否真的不同。

就存储过程的改进而言,相差6%听起来并不多。我已经从我的同事那里获得了两个数量级的期望,如果他仅达到一个数量级,我会感到很失望...

他不必使用EvanMiller主页来证明他的解决方案可以更快地工作。

我还将从http://www.sqlsentry.com/安装SQLSentrys(edit :) Plan Explorer,因为这是一个比较执行计划的改进工具。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.