【问题标题】:Currently running queries in SQL Server [duplicate]当前在 SQL Server 中运行查询 [重复]
【发布时间】:2012-05-26 15:50:01
【问题描述】:

是否有程序或 sql 查询可以找到在 SQL Server 2012 上运行的 SQL 查询?我认为早期版本的 SQL Server 中有一个工具可以显示实际查询内容或存储过程名称?

【问题讨论】:

  • SQL 分析器,不是吗? :)

标签: sql sql-server sql-server-2008


【解决方案1】:

根据您的权限,此查询可能有效:

SELECT sqltext.TEXT,
req.session_id,
req.status,
req.command,
req.cpu_time,
req.total_elapsed_time
FROM sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext

参考:http://blog.sqlauthority.com/2009/01/07/sql-server-find-currently-running-query-t-sql

【讨论】:

  • 这确实有效,但是有什么方法可以找出参数值吗?
【解决方案2】:

我使用下面的查询

SELECT   SPID       = er.session_id
    ,STATUS         = ses.STATUS
    ,[Login]        = ses.login_name
    ,Host           = ses.host_name
    ,BlkBy          = er.blocking_session_id
    ,DBName         = DB_Name(er.database_id)
    ,CommandType    = er.command
    ,ObjectName     = OBJECT_NAME(st.objectid)
    ,CPUTime        = er.cpu_time
    ,StartTime      = er.start_time
    ,TimeElapsed    = CAST(GETDATE() - er.start_time AS TIME)
    ,SQLStatement   = st.text
FROM    sys.dm_exec_requests er
    OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) st
    LEFT JOIN sys.dm_exec_sessions ses
    ON ses.session_id = er.session_id
LEFT JOIN sys.dm_exec_connections con
    ON con.session_id = ses.session_id
WHERE   st.text IS NOT NULL

【讨论】:

  • 我发现这比其他搜索显示正在运行的作业的查询更有帮助。这个显示主机和登录名,太好了,谢谢!
【解决方案3】:

这是 SQL Server DMV 的 In Action 书中的内容:

输出显示 spid(进程标识符)、ecid(这类似于同一 spid 中的线程,对于识别并行运行的查询很有用)、运行 SQL 的用户、状态(SQL 是否运行或等待)、等待状态(为什么等待)、主机名、域名和开始时间(用于确定批处理运行了多长时间)。

很好的部分是查询和父查询。例如,这显示了作为父级的存储过程以及正在运行的存储过程中的查询。这对我来说非常方便。我希望这对其他人有帮助。

USE master
GO
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT
er.session_Id AS [Spid]
, sp.ecid
, er.start_time
, DATEDIFF(SS,er.start_time,GETDATE()) as [Age Seconds]
, sp.nt_username
, er.status
, er.wait_type
, SUBSTRING (qt.text, (er.statement_start_offset/2) + 1,
((CASE WHEN er.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
ELSE er.statement_end_offset
END - er.statement_start_offset)/2) + 1) AS [Individual Query]
, qt.text AS [Parent Query]
, sp.program_name
, sp.Hostname
, sp.nt_domain


FROM sys.dm_exec_requests er
INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle)as qt
WHERE session_Id > 50
AND session_Id NOT IN (@@SPID)
ORDER BY session_Id, ecid

【讨论】:

    【解决方案4】:

    这是安装 SQL 分析器 http://msdn.microsoft.com/en-us/library/bb500441.aspx 所需的内容。但是,如果您希望在您的生产环境中执行此操作,我建议您通读http://blog.sqlauthority.com/2009/08/03/sql-server-introduction-to-sql-server-2008-profiler-2/。 还有另一种更好的方法来查看查询看这个,看看它是否有帮助 http://www.youtube.com/watch?v=vvziPI5OQyE

    【讨论】:

      【解决方案5】:

      该工具称为 SQL Server Profiler,它仍然是标准工具集的一部分。

      【讨论】:

      • SQL Server Profiler 在哪里?在我的 MS SQL Server 2012 中,没有 Performance Tools 文件夹。我没有看到任何其他工具。如何安装这些工具。我以为一切都安装好了。 Profiler 是否仍在 SQL Server 2012 中?这些工具在哪里安装?
      • 非快递版,自带管理工具选项; express 版本不包括 Profiler
      【解决方案6】:

      你说的是SQL Profiler

      【讨论】:

        猜你喜欢
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-17
        • 2012-05-09
        相关资源
        最近更新 更多