什么阻止了我的查询?

时间:2015-02-16 10:14:00

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

我在SqlServer中有一个非常有趣的情况:我找不到阻止另一个进程的进程。 我运行以下选择:

SELECT * FROM sys.sysprocesses WHERE blocked > 0

我收到一行包含阻止值“58”的行。 因此,我发送以下声明:

SELECT * FROM sys.sysprocesses WHERE spid = 58

我一无所获! 这怎么可能?

我正在使用Sqlserver 2008 R2

2 个答案:

答案 0 :(得分:0)

试试这个。

SELECT db.name                  DBName,
       tl.request_session_id,
       wt.blocking_session_id,
       OBJECT_NAME(p.OBJECT_ID) BlockedObjectName,
       tl.resource_type,
       h1.TEXT                  AS RequestingText,
       h2.TEXT                  AS BlockingTest,
       tl.request_mode
FROM   sys.dm_tran_locks AS tl
       INNER JOIN sys.databases db
               ON db.database_id = tl.resource_database_id
       INNER JOIN sys.dm_os_waiting_tasks AS wt
               ON tl.lock_owner_address = wt.resource_address
       INNER JOIN sys.partitions AS p
               ON p.hobt_id = tl.resource_associated_entity_id
       INNER JOIN sys.dm_exec_connections ec1
               ON ec1.session_id = tl.request_session_id
       INNER JOIN sys.dm_exec_connections ec2
               ON ec2.session_id = wt.blocking_session_id
       CROSS APPLY sys.dm_exec_sql_text(ec1.most_recent_sql_handle) AS h1
       CROSS APPLY sys.dm_exec_sql_text(ec2.most_recent_sql_handle) AS h2

这将为您提供阻止会话列表。

使用此命令终止会话。

Kill sessionid

答案 1 :(得分:0)

试一试:

EXECUTE sp_who2 GO

您可能需要获得更高的权限,或让您的平台团队运行它,因为它是系统存储过程。