是否有替代 SET STATISTICS TIME 也显示语句的替代方法?

Posted

技术标签:

【中文标题】是否有替代 SET STATISTICS TIME 也显示语句的替代方法?【英文标题】:Is there an alternative to SET STATISTICS TIME which also shows the statements? 【发布时间】:2018-05-25 08:08:51 【问题描述】:

SET STATISTICS TIME 语句仅在开发时有用,因为它可以对添加到查询或正在处理的 UDF/SP 的附加语句进行性能调整。但是,当必须对现有代码进行性能调整时,例如一个有成百上千行代码的 SP,这个语句的输出是完全没有用的,因为不清楚记录的时间属于哪个 SQL 语句。

是否有任何替代 SET STATISTICS TIME 也显示记录时间所属的语句?

【问题讨论】:

【参考方案1】:

我建议使用高级工具。这是一次调用 sp 的示例,其中包含所有内部细节。在右侧,您有不同的运行历史记录,以后可以对其进行评论和分析。统计/索引使用/io/等待所需的一切 - 不同选项卡上的所有内容。实用工具:SentryOne Plan Explorer(免费)。

【讨论】:

【参考方案2】:

如果您的存储过程是细粒度的,那么您可以使用此 DMV 来了解时间。

SELECT 
    DB_NAME(qs.database_id) AS DBName
    ,qs.database_id
    ,qs.object_id
    ,OBJECT_NAME(qs.object_id,qs.database_id) AS ObjectName
    ,qs.cached_time
    ,qs.last_execution_time
    ,qs.plan_handle
    ,qs.execution_count
    ,total_worker_time
    ,last_worker_time
    ,min_worker_time
    ,max_worker_time
    ,total_physical_reads
    ,last_physical_reads
    ,min_physical_reads
    ,max_physical_reads
    ,total_logical_writes
    ,last_logical_writes
    ,min_logical_writes
    ,max_logical_writes
    ,total_logical_reads
    ,last_logical_reads
    ,min_logical_reads
    ,max_logical_reads
    ,total_elapsed_time
    ,last_elapsed_time
    ,min_elapsed_time
    ,max_elapsed_time
FROM 
    sys.dm_exec_procedure_stats qs

【讨论】:

【参考方案3】:

我将创建一个类似于以下的扩展事件会话:

CREATE EVENT SESSION [proc_statments] ON SERVER 
ADD EVENT sqlserver.module_end(
    WHERE ([object_name]=N'usp_foobar')
),
ADD EVENT sqlserver.sp_statement_completed(
    SET collect_object_name=(1),collect_statement=(1)
    WHERE ([object_name]=N'usp_foobar'))
ADD TARGET package0.event_file(SET filename=N'proc_statments')
WITH (TRACK_CAUSALITY=ON)
GO

这会跟踪名为usp_foobar 的过程的存储过程和存储过程语句的完成情况。在事件本身中,有一个标识符可以帮助您将执行特定过程(这就是 TRACK_CAUSALITY 的用途)所执行的语句联系在一起。

【讨论】:

以上是关于是否有替代 SET STATISTICS TIME 也显示语句的替代方法?的主要内容,如果未能解决你的问题,请参考以下文章

sql查询性能调试,用SET STATISTICS IO和SET STATISTICS TIME---解释比较详细

SQL Server读懂语句运行的统计信息 SET STATISTICS TIME IO PROFILE ON

SQL Server 数据库性能优化

Java中的Joda-Time间隔是不是有替代方法,它可以作为结束时间

sql SET STATISTICS IO.sql

SQL Server2008优化之SET STATISTICS开关