【问题标题】: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()
    

    通过这种方式,您可以立即查看导致问题的原因,即使存储过程需要很长时间才能运行。即使存储过程遇到障碍,它也很有用,因为您可以看到最后成功的事情是什么。祝你好运。

    【讨论】:

      【解决方案4】:

      使用 SQL Profiler 连接并观察每个语句及其时间。

      使用以 SP: 开头的事件进行观察,但要注意 Profiler 可能会对性能产生影响。

      https://dba.stackexchange.com/questions/29284/how-to-profile-stored-procedures

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-13
        • 1970-01-01
        • 2013-11-16
        相关资源
        最近更新 更多