Sql server 2005 SQLServerProfiler2005:如何使用触发器测量insert语句的执行时间?

Sql server 2005 SQLServerProfiler2005:如何使用触发器测量insert语句的执行时间?,sql-server-2005,triggers,insert,sql-server-profiler,Sql Server 2005,Triggers,Insert,Sql Server Profiler,我想测量insert语句的执行时间(使用SQLServer探查器中的持续时间),该语句上有insert而非insert触发器。如何度量此语句的完整时间,包括触发器时间?您在SQL server profiler中看到的查询执行时间(持续时间)是执行该查询所用的时间,包括评估任何触发器或其他约束 由于触发器旨在用作检查数据完整性的替代方法,因此在任何触发器也完成之前,SQL语句都不会被视为已完成 更新:一些常用SQL Server探查器事件的概述: SQL:BatchCompleted在SQL

我想测量insert语句的执行时间(使用SQLServer探查器中的持续时间),该语句上有insert而非insert触发器。如何度量此语句的完整时间,包括触发器时间?

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

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

更新:一些常用SQL Server探查器事件的概述:

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

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

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

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

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

此外,上述每个事件还具有相应的
Starting
事件-
SP:Starting
SQL:BatchStarting
SQL:StmtStarting
SP:StmtCompleted
。这些没有列出持续时间(因为我们还不知道持续时间,因为它还没有完成,但是可以帮助显示持续时间录制从何时开始)

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

SELECT * FROM SomeTable
GO

SELECT * FROM SomeTable
SELECT * FROM OtherTable
GO

SELECT * FROM SomeTable
exec SomeProc
GO
正如您应该看到的,对于上面3个示例中的每一个,您总是会得到一个
SQL:BatchStarting
SQL:BatchCompleted
,但是其他事件类型提供了有关单个命令运行的更多详细信息

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

有关各种SQL Server评测事件的更多信息,请参阅-有很多

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


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

探查器中有这么多事件类,我应该使用哪一个:SP:Completed、SQL:BatchCompleted、SQL:StmtCompleted等等?@User简短的答案是“可能
SQL:BatchCompleted
”,有关详细答案,请参阅我的编辑。