有时我们需要处理长存储过程以使它们运行得更快。快速识别哪部分代码是最慢的部分的最佳方法是什么?对我来说,我只是在存储过程中添加一些PRINT
语句并运行它,然后我可以找到哪个部分很慢。我想知道有没有替代方法?
答案 0 :(得分:0)
对我来说,几乎和你一样,只需将程序各部分的开始时间和结束时间插入日志表中,然后检查记录。打印只是帮你检查一次。日志表可以帮助您查看该过程是否出现了一些问题。
答案 1 :(得分:0)
使用“执行计划”执行该程序。这将帮助您确定该过程的哪个部分花费更多时间。如果您需要添加任何索引,它也会建议您。
在“SQL Server Management Studio”中执行脚本之前,请选择“包括实际执行计划”或使用Ctrl + M然后运行脚本/过程调用。
在“执行计划”窗口(结果选项卡旁边)中,您可以详细查看和分析它。
答案 2 :(得分:0)
赞同Raffaello。具体做法是:
--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()
通过这种方式,您可以立即查看导致问题的原因,即使存储过程需要很长时间才能运行。即使存储过程遇到麻烦,它也很有用,因为你可以看到最后一个成功的东西是什么。祝你好运。
答案 3 :(得分:0)
使用SQL事件探查器连接并观察每个语句及其时间。
使用以SP开头的事件:观察但要注意Profiler可能会对性能产生影响。
https://dba.stackexchange.com/questions/29284/how-to-profile-stored-procedures