我正在使用以下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上当前是否存在长时间运行的查询吗?
答案 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