【问题标题】:For long stored procedures, how to quickly identity the most time-consuming part?对于长存储过程,如何快速识别出最耗时的部分?
【发布时间】:2016-04-28 15:12:02
【问题描述】:
有时我们需要处理长存储过程以使它们运行得更快。快速识别代码的哪一部分是最慢的部分的最佳方法是什么?对我来说,我只是在存储过程中添加一些PRINT 语句并运行它,然后我可以找到哪个部分慢。我想知道有没有其他的方法?
【问题讨论】:
标签:
sql
sql-server
performance
stored-procedures
sql-tuning
【解决方案1】:
对我来说和你差不多,只是将程序各部分的开始时间和结束时间插入到日志表中,然后查看记录。打印只是帮助您检查1次。日志表可以帮助您查看程序是否有问题。
【解决方案2】:
使用“执行计划”执行程序。这将帮助您确定程序的哪个部分需要更多时间。如果您需要添加任何索引,它也会建议您。
在“SQL Server Management Studio”中执行脚本之前,选择“包括实际执行计划”或使用 Ctrl+M 然后运行脚本/过程调用。
在“执行计划”窗口(结果选项卡旁边)中,您可以查看并详细分析它。
【解决方案3】:
同意拉斐尔的观点。具体来说:
--initialise
DELETE FROM DB..Perf_Log;
DECLARE @lastTime datetime
set @lastTime=getdate()
/* do some shit */
--add this block after each big block of functionality that you want to test
insert into DB..Perf_Log values ('did some stuff 1',datediff("MILLISECOND",@lastTime,getdate()))
set @lastTime=getdate()
通过这种方式,您可以立即查看导致问题的原因,即使存储过程需要很长时间才能运行。即使存储过程遇到障碍,它也很有用,因为您可以看到最后成功的事情是什么。祝你好运。