我在SqlServer中有一个非常有趣的情况:我找不到阻止另一个进程的进程。 我运行以下选择:
SELECT * FROM sys.sysprocesses WHERE blocked > 0
我收到一行包含阻止值“58”的行。 因此,我发送以下声明:
SELECT * FROM sys.sysprocesses WHERE spid = 58
我一无所获! 这怎么可能?
我正在使用Sqlserver 2008 R2
答案 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
您可能需要获得更高的权限,或让您的平台团队运行它,因为它是系统存储过程。