如何衡量存储过程的性能?

时间:2009-09-22 19:36:26

标签: performance tsql stored-procedures

我正在使用不支持分析器的SQL Server 2005版本,​​试图弄清楚如何最好地比较两个存储过程的性能。我已经为每个人执行了执行计划,但我不清楚我应该关注哪些提供的指标。我是否经历并加上各种费用?什么是最好的方法?

提前致谢。

7 个答案:

答案 0 :(得分:18)

看看这篇文章:Measuring SQL Performance

如果您不想注册免费帐户,请参阅解决方案1:

DECLARE @start datetime, @stop datetime
SET @start = GETDATE()
EXEC your_sp
SET @stop = GETDATE()

第二

SET STATISTICS TIME ON
EXEC your_sp

第三

SET STATISTICS IO ON
EXEC your_sp

顺便说一下,这个网站有一些不错的文章。我建议注册。它是免费的。

答案 1 :(得分:1)

问题是你在优化什么?它是用于速度还是资源?

如果是速度,那么在查询分析器中,我会查看几次运行之间的执行,进行更改并再次计时。

如果是资源,那么我会查看执行计划。在那种情况下,我会从更糟糕的罪犯开始,然后按照我的方式行事。添加它们会告诉你所有的性能,但大多数情况下它是一个项目或2是瓶颈。

答案 2 :(得分:1)

如果您使用的是

SET SHOWPLAN_ALL ON

使用EXE YourProcedureName

查看行的TotalSubtreeCost列值

这可能会有所帮助:

http://technet.microsoft.com/en-us/library/ms180765.aspx

答案 3 :(得分:0)

与大多数问题一样,答案取决于......归根结底,唯一重要的措施是终端用户感知,这可能会受到很多因素的影响,不仅包括存储过程,还包括网络性能,使用模式(sProc被称为20x /天,或1000x /秒?)等,而sProc可能不是决定因素。

但是,如果存储过程是对最终用户对某些功能产生主要负面影响的“拼图”,则必须查看运行存储过程所用的时间。但是这本身可能会受到众多基础指标的影响,并且要对其进行任何操作,您需要对它们进行全部分析,以确定它们中哪一个是整个存储过程性能的主要或最重要的贡献者。

答案 4 :(得分:0)

您可以随时安装测试工具来调用存储过程并测量通话时间。遗憾的是,您无法详细了解存储过程的哪些部分导致速度变慢。

您始终可以在查询分析器中手动运行存储过程,并以这种方式测量结果。 .NET工具只为您自动完成该过程。

答案 5 :(得分:0)

简单的低眉解决方案是使用print语句运行它们,在各个部分上打印执行时间。如果性能问题更加微妙并且仅在生产中发现,这将无济于事,但如果您可以在测试环境中重现它,那么您应该没问题。

答案 6 :(得分:0)

如果您尝试比较两个proc或语句的性能,一种方便的技巧是在查询分析器中选择两个sql块并运行查询计划。该计划将告诉您每个区块相对于彼此的成本百分比。这不是完全证明。我已经看到它告诉我一个在实际运行时显然更贵的一个便宜,但在大多数情况下它是一个很好的,快速的技巧。