如何获得 SQL 服务器存储过程的准确计时?
How do I get an accurate timing of a SQL Server stored procedure?
我正在计算使用原始数据库和快照之间的区别。
我可以使用此例程对 UDF 和视图计时:
DECLARE @Loops INT SET @Loops = 1
DECLARE @CPU INT SET @CPU = @@CPU_BUSY
DECLARE @StartDate DATETIME SET @StartDate = GETDATE()
DECLARE @SelectedValue int
WHILE @Loops <= 100
BEGIN
EXEC @SelectedValue = CashFlow.usp_CSF_Report_ProjectedExpendituresByFundingParticipant '7/1/1999'
IF @SelectedValue = 50
PRINT 1
SET @Loops = @Loops + 1
END
PRINT 'usp_CSF_Report_ProjectedExpendituresByFundingParticipant'
PRINT 'Total CPU time: ' + CONVERT(varchar, @@CPU_BUSY - @CPU)
PRINT 'Total milliseconds: ' + CONVERT(varchar, DATEDIFF(ms, @StartDate, GETDATE()))
PRINT ''
但是当我 运行 它带有一个存储过程时,如图所示,我得到了结果集。
我担心显示结果所花费的时间会使计时结果无效。
尝试将其包装在视图或 UDF 中,但我没有看到任何不会增加大量随机开销的解决方案。
我如何捕捉或忽略结果而不显示它们?
您最多只能将结果插入 table 变量。所以他们不会转移给客户。当然,您必须在每次调用之间截断它。
话虽如此,如果您正在尝试进行性能调整,我会考虑使用 SET STATISTICS IO ON 和 SET STATISTICS TIME ON...这将告诉您逻辑磁盘读取次数和 CPU次。
另外看看实际的查询执行计划。以我的经验,逻辑磁盘读取最少的查询通常是最快的。
您可以使用服务器端跟踪或扩展事件。
我正在计算使用原始数据库和快照之间的区别。 我可以使用此例程对 UDF 和视图计时:
DECLARE @Loops INT SET @Loops = 1
DECLARE @CPU INT SET @CPU = @@CPU_BUSY
DECLARE @StartDate DATETIME SET @StartDate = GETDATE()
DECLARE @SelectedValue int
WHILE @Loops <= 100
BEGIN
EXEC @SelectedValue = CashFlow.usp_CSF_Report_ProjectedExpendituresByFundingParticipant '7/1/1999'
IF @SelectedValue = 50
PRINT 1
SET @Loops = @Loops + 1
END
PRINT 'usp_CSF_Report_ProjectedExpendituresByFundingParticipant'
PRINT 'Total CPU time: ' + CONVERT(varchar, @@CPU_BUSY - @CPU)
PRINT 'Total milliseconds: ' + CONVERT(varchar, DATEDIFF(ms, @StartDate, GETDATE()))
PRINT ''
但是当我 运行 它带有一个存储过程时,如图所示,我得到了结果集。
我担心显示结果所花费的时间会使计时结果无效。
尝试将其包装在视图或 UDF 中,但我没有看到任何不会增加大量随机开销的解决方案。
我如何捕捉或忽略结果而不显示它们?
您最多只能将结果插入 table 变量。所以他们不会转移给客户。当然,您必须在每次调用之间截断它。
话虽如此,如果您正在尝试进行性能调整,我会考虑使用 SET STATISTICS IO ON 和 SET STATISTICS TIME ON...这将告诉您逻辑磁盘读取次数和 CPU次。
另外看看实际的查询执行计划。以我的经验,逻辑磁盘读取最少的查询通常是最快的。
您可以使用服务器端跟踪或扩展事件。