2011-03-04 93 views
11

如何查找正在执行的关联查询(如果我拥有SPID)。试图找出哪些查询正在被关联,因为该过程似乎被挂起。SQL Server - 挂起进程 - SPID查询

+0

您正在使用哪种版本的SQL Server? – 2011-03-04 19:18:13

回答

10

什么版本的sql server? 2000年和高达你可以做

dbcc inputbuffer (spid) 

这将会给前255个字符与SPID

2005年的数值数

更换SPID和建立,改变@@ SPID的SPID你正在寻找

select dest.* 
from sys.dm_exec_requests as der 
      cross apply sys.dm_exec_sql_text (der.sql_handle) as dest 
where session_id = @@spid 
3

假设的SQL Server 2005+

SELECT 
    CASE 
     WHEN statement_end_offset = -1 
     THEN text 
     ELSE SUBSTRING(text,statement_start_offset/2,(statement_end_offset- statement_start_offset)/2) 
    END, * 
FROM sys.dm_exec_requests 
CROSS APPLY sys.dm_exec_sql_text(sql_handle) 
WHERE session_id = <whatever> 

您可能需要下载“Who is Active?”的过程,拉在一起比这更多的信息。

12
--Find Current SQL Statements that are Running 
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