【问题标题】:Currently running query inside a stored procedure当前在存储过程中运行查询
【发布时间】:2012-02-15 12:31:30
【问题描述】:

我有一个当前正在运行的存储过程,并且似乎挂起/锁定特定查询。我怎样才能看到哪个查询?最好不要修改proc。

使用

DBCC Inputbuffer (65)

给我

语言事件 0 EXEC mySP;

【问题讨论】:

    标签: sql-server sql-server-2008 tsql stored-procedures dbcc


    【解决方案1】:
    SELECT SUBSTRING(st.text, ( r.statement_start_offset / 2 ) + 1, 
                  ( ( CASE WHEN r.statement_end_offset <= 0
                           THEN DATALENGTH(st.text) 
                  ELSE r.statement_end_offset END - 
           r.statement_start_offset ) / 2 ) + 1) AS statement_text 
    FROM   sys.dm_exec_requests r 
           CROSS APPLY sys.dm_exec_sql_text(sql_handle) st 
    WHERE  session_id = 65 
    

    【讨论】:

    • 酷,这似乎工作得很好! (对于其他想要这个的人,更改/删除 WHERE 行。)
    • 添加一行 WHERE session_id != 很有帮助
    • @GabrielMcAdams - 在问题的情况下,他们对会话 ID 65(来自 DBCC Inputbuffer (65))特别感兴趣
    • @MartinSmith - 你是对的,我并不是说这会对原始发帖人有所帮助 - 而是在他的评论中添加提到删除 where 子句。
    【解决方案2】:

    有一个出色的存储过程可以获取有关当前正在运行的查询的扩展信息。可从以下位置下载: http://whoisactive.com

    【讨论】:

      【解决方案3】:

      使用 SQL Profiler;顾名思义,它是 SQL Server 的主要分析工具,它可以显示过程中每个语句的执行时间。

      【讨论】:

      • 这也是我的想法,但它向我展示的只是用于触发 SP 的“EXEC mySP”查询。还是我使用了不正确的过滤?
      • @cederlof - 您需要在 Profiler 中捕获 SP:StmtCompletedSP:StmtStarting 事件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-07
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      相关资源
      最近更新 更多