【问题标题】:SQL Server Profiler 2005: How to measure execution time of insert statement with trigger?SQL Server Profiler 2005:如何使用触发器测量插入语句的执行时间?
【发布时间】:2011-05-22 14:22:09
【问题描述】:

我想测量一个插入语句的执行时间(使用我猜来自 SQL Server Profiler 的持续时间),该语句上有一个而不是插入触发器。如何测量这条语句的完整时间,包括触发时间?

【问题讨论】:

    标签: sql-server-2005 triggers insert sql-server-profiler


    【解决方案1】:

    您在 SQL Server Profiler 中看到的查询执行时间(持续时间)是执行该查询所花费的时间包括评估任何触发器或其他约束

    由于触发器旨在用作检查数据完整性的替代方法,因此在任何触发器也完成之前,不会认为 SQL 语句已完成。

    更新:一些常用的 SQL Server 分析器事件概述:

    • SQL:BatchCompleted 在 SQL 服务器批处理(一组语句)已完成执行时发生 - 持续时间是执行批处理的总时间。

    • SQL:StmtCompleted 在作为批处理的一部分执行的 SQL 语句完成执行时发生 - 持续时间同样是执行该单个语句的时间。

    • SP:Completed在存储过程完成执行时发生 - 显示的持续时间是完成存储过程执行的时间。

    • SP:StmtCompleted在作为存储过程的一部分执行的 SQL 语句完成时发生。

    批处理是由GO 语句分隔的一组 SQL 语句,但是要理解上述内容,您还应该知道所有 SQL 服务器命令都是在批处理上下文中执行的*。

    此外,上述每个事件还有一个对应的Starting 事件-SP:StartingSQL:BatchStartingSQL:StmtStartingSP:StmtCompleted。这些没有列出持续时间(因为我们还不知道持续时间,因为它尚未完成,但确实有助于显示持续时间记录的开始时间)。

    为了更好地理解这些事件之间的关系,我建议您尝试捕获一些简单示例的一些痕迹(来自 SQL Server Management Studio),例如:

    SELECT * FROM SomeTable
    GO
    
    SELECT * FROM SomeTable
    SELECT * FROM OtherTable
    GO
    
    SELECT * FROM SomeTable
    exec SomeProc
    GO
    

    如您所见,对于上述 3 个示例中的每一个,您总是会得到 SQL:BatchStartingSQL:BatchCompleted,但其他事件类型提供了有关各个命令运行的更多详细信息。

    出于这个原因,我通常最倾向于使用SQL:BatchCompleted 事件,但是如果您尝试测量的语句作为较大批处理的一部分(或在存储过程中)执行,那么您可能会发现其中一个其他有帮助的事件类。

    有关各种 SQL Server 分析事件的详细信息,请参阅 TSQL Event Category (MSDN) - 有很多!

    最后,如果您在 SQL Server Management Studio 中执行此命令,请注意记录执行时间的最简单方法是使用客户端统计功能:

    (*) 我很确定一切都是作为批处理的一部分执行的,尽管我没有设法在互联网上找到任何证据来证实这一点。

    【讨论】:

    • profiler中有这么多事件类,我应该使用哪一个:SP:Completed、SQL:BatchCompleted、SQL:StmtCompleted等?
    • @User 简短的回答是“可能是SQL:BatchCompleted”,详细的回答请看我的编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多