sql等待sp / rpc / stmt完成和其他事件

时间:2017-05-25 15:28:33

标签: sql-server sqlperformance extended-events

在SQL XE中,对于sp / rpc / stmt已完成事件,如果我们可以包含等待类型,如IO /网络等待等,那将是很好的。就像我们可以看到读/ cpu / duration,如果我们也可以获得其他资源等待,我们可以很好地了解为什么在持续时间/ CPU高且读取率低的情况下sql很慢。

1 个答案:

答案 0 :(得分:0)

您实际上可以跟踪查询的等待统计信息,但反过来 - 通过跟踪等待统计信息本身。请查看以下代码段和结果图片:

CREATE EVENT SESSION [Wait Statistics] ON SERVER 
ADD EVENT sqlos.wait_info
(
    ACTION(sqlserver.database_name,sqlserver.session_id,sqlserver.sql_text)
    WHERE (             
            opcode = N'End'
            AND duration > 0
         )
),
ADD EVENT sqlos.wait_info_external
(
    ACTION(sqlserver.database_name,sqlserver.session_id,sqlserver.sql_text)
    WHERE ( 
            opcode = N'End'
            AND duration > 0
          )
) 

enter image description here

这里我们捕获每次等待的结束(这是因为此时SQL Server知道统计信息的持续时间,因此我们可以输出结果)持续时间大于0.在ACTION部分我们检索导致统计信息的查询的数据库名称,文本和查询的会话ID。

要小心。通过扩展事件跟踪等待统计信息(而不是通过收集汇总数据的sys.dm_os_wait_stats)可以快速生成数据压倒性地。如果您选择此方法,则应非常仔细地定义要跟踪的等待统计信息以及统计信息的持续时间导致问题的原因。