在SQL Server中返回当前长时间运行的查询

时间:2018-07-25 15:15:08

标签: sql sql-server

我正在使用以下SQL查询:

SELECT status, total_elapsed_time, text 
FROM sys.dm_exec_requests CROSS APPLY 
     sys.dm_exec_sql_text(sql_handle) 
WHERE status = 'running' AND 
      text like '%Insert%' AND 
      total_elapsed_time > '5'

要检查文本中包含“ 插入”并且其 total_elapsed_time值的特定运行查询是否大于5毫秒。

但是当我手动运行查询是SSMS时, 我总是得到不同的输出。

我不需要获取固定的输出(与我的查询条件当然匹配吗?。)?

还有其他建议的方法来检查我的SQL Server上当前是否存在长时间运行的查询吗?

1 个答案:

答案 0 :(得分:0)

首先,我建议从结果集中排除您自己的查询。此外,为了接收相同的订单,您应该包括ORDER BY。像下面这样的东西可能会解决问题:

SELECT STATUS
    ,total_elapsed_time
    ,TEXT
FROM sys.dm_exec_requests a
CROSS APPLY sys.dm_exec_sql_text(sql_handle) b
WHERE STATUS = 'running'
    AND TEXT LIKE '%Insert%'
    AND text NOT LIKE 'SELECT STATUS%TOTAL_ELAPSED_TIME%sys.dm_exec_requests%'
    AND total_elapsed_time > '5'
ORDER BY a.start_time DESC
        ,a.statement_start_offset DESC
        ,a.statement_end_offset DESC
        ,total_elapsed_time DESC