对于长存储过程,如何快速识别最耗时的部分?

时间:2016-01-22 05:26:22

标签: sql sql-server performance stored-procedures sql-tuning

有时我们需要处理长存储过程以使它们运行得更快。快速识别哪部分代码是最慢的部分的最佳方法是什么?对我来说,我只是在存储过程中添加一些PRINT语句并运行它,然后我可以找到哪个部分很慢。我想知道有没有替代方法?

4 个答案:

答案 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