【问题标题】:get all executed queries in sql server获取sql server中所有执行的查询
【发布时间】:2012-06-21 11:27:21
【问题描述】:

我需要一个可以执行的存储过程 并显示

“当前连接的所有 SQL 之前已运行”和“当前未运行”。

我对此进行了很多搜索,但找不到答案。请帮我解决这个问题。

【问题讨论】:

    标签: sql sql-server stored-procedures


    【解决方案1】:

    最好使用 Profiler 来完成这项任务。

    但如果您想在SQL Server 2005+ 中查询,您可以使用系统视图sys.dm_exec_query_stats,其中returns aggregate performance statistics for cached query plans 但仅适用于兑现计划 和sys.dm_exec_sql_text。不幸的是,他们没有关于会话 ID 的信息,因此您只能获得服务器实例的兑现查询。

    set transaction isolation level read uncommitted
    select top 1000
        creation_time,
        last_execution_time,
        case 
            when sql_handle IS NULL then ' '
            else(substring(st.text,(qs.statement_start_offset+2)/2,(
                case
                    when qs.statement_end_offset =-1 then len(convert(nvarchar(MAX),st.text))*2      
                    else qs.statement_end_offset    
                end - qs.statement_start_offset)/2  ))
        end as query_text,
        db_name(st.dbid)as db_name,
        object_schema_name(st.objectid, st.dbid)+'.'+object_name(st.objectid, st.dbid) as object_name
    FROM sys.dm_exec_query_stats  qs
         cross apply sys.dm_exec_sql_text(sql_handle) st
    ORDER BY db_name, object_name
    

    【讨论】:

    • 太棒了:)。这就是我一直在寻找的。非常感谢
    【解决方案2】:

    在甲骨文中:

    How do I show running processes in Oracle DB?

    我认为在SQL server 2005+ 中,您可以使用 SPID 找到以前的。 它会为您提供带有 XXX SPID 的进程。也许您可以获取正在运行的进程的 SPID 并创建一个循环,直到正在运行的 SPID。所以你可以得到所有进程,直到运行进程。

    DECLARE @sqltxt VARBINARY(128)
    SELECT @sqltxt = sql_handle
    FROM sys.sysprocesses
    WHERE spid = XXX
    SELECT TEXT
    FROM sys.dm_exec_sql_text(@sqltext)
    GO
    

    你也可以通过这些来运行sql语句;

    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
    

    它将对您有用。我猜

    【讨论】:

    • sys.dm_exec_requests 不是仅包含有关当前正在执行的查询的信息吗?
    • 伊戈尔,是的。这将得到运行的。再次编辑:/
    • blog.sqlauthority.com/2009/07/19/… 有 3 种方式来显示每个会话执行的最后一个查询。我喜欢 'DBCC INPUTBUFFER(@DesiredSPID)' 之一。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    相关资源
    最近更新 更多