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

bjn*_*jnr 21 performance sql-server

我有 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%,无论执行条件如何(服务器的工作量,执行这些存储过程的服务器等)?

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

Goo*_*SQL 19

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

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

如果存储过程中有参数,最好仔细检查您的改进是否适用于许多不同的参数集。SQLQueryStress 做了一些很酷的事情,让您替换查询中的参数,以更好地了解存储过程的执行情况。

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

SQL查询压力


小智 7

4/ 您可以访问http://statisticsioparser.com/statisticsioparser/并粘贴您的统计数据以查看总分。