如何使用进程 ID、进程名称、登录时间、用户、开始时间和持续时间查找长时间运行的查询?

use*_*321 29 sql-server

任何人都可以帮我找到下面给出的长时间运行查询的详细信息。ProcessID、进程名称、数据库、主机、用户、进程登录时间、查询开始时间和查询持续时间。

我正在寻找提供此数据的查询或 SP。

Yar*_*lav 43

至于评论,最好的工具是周围sp_whoIsActive亚当Machanic。它可以以多种方式使用,以查看启动脚本时正在运行的内容,或者您​​可以循环运行它以监视某些特定操作,例如慢查询。

要在循环中运行,请查看此处:如何在循环中使用 sp_whoisactive 记录活动 检测慢查询:如何使用 sp_WhoIsActive 查找慢 SQL Server 查询

您可以直接使用 DMV 来获取最慢的查询并从那里采取行动。检查Glenn Berry 的诊断查询

最后,您可以使用此查询来查找最耗时的查询。您可以使用dm_exec_query_stats来添加更多数据或加入其他数据以获取更多信息。请注意,每次重新启动服务器时,dmv 都会被刷新并刷新。

SELECT  creation_time 
        ,last_execution_time
        ,total_physical_reads
        ,total_logical_reads 
        ,total_logical_writes
        , execution_count
        , total_worker_time
        , total_elapsed_time
        , total_elapsed_time / execution_count avg_elapsed_time
        ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
         ((CASE statement_end_offset
          WHEN -1 THEN DATALENGTH(st.text)
          ELSE qs.statement_end_offset END
            - qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
ORDER BY total_elapsed_time / execution_count DESC;
Run Code Online (Sandbox Code Playgroud)

编辑

一个新选项已经在一段时间内可用,First Reponder Kit。是一组脚本,由 BrentOzar 团队在MIT 许可下免费提供,将有助于各种任务,包括 OP 要求的任务。这种情况下主要是sp_BlitzFirstsp_BlitzWho脚本。


Bob*_*eri 11

我强烈推荐sp_whoisactive。它是第三方 SP,但可以告诉您上面列出的所有内容,而且远不止这些。这是您的武器库中令人难以置信的工具。