无论出于何种原因,数据库中的一个特定表开始不能在特定表上完成任何查询结果。它说'执行查询...'并没有完成。如何检查SQL表是否被锁定以查询?
像:
select * from foo
其他表返回行。
如何/我在哪里可以检查表是否被锁定?
无论出于何种原因,数据库中的一个特定表开始不能在特定表上完成任何查询结果。它说'执行查询...'并没有完成。如何检查SQL表是否被锁定以查询?
像:
select * from foo
其他表返回行。
如何/我在哪里可以检查表是否被锁定?
检查该样本
select
object_name(P.object_id) as TableName
, resource_type
, resource_description
, request_mode
, CASE REQUEST_MODE
WHEN 'S' THEN 'Shared'
WHEN 'U' THEN 'Update'
WHEN 'X' THEN 'Exclusive'
WHEN 'IS' THEN 'Intent Shared'
WHEN 'IU' THEN 'Intent Update'
WHEN 'IX' THEN 'Intent Exclusive'
WHEN 'SIU' THEN 'Shared Intent Update'
WHEN 'SIX' THEN 'Shared Intent Exclusive'
WHEN 'UIX' THEN 'Update Intent Exclusive'
WHEN 'BU' THEN 'Bulk Update'
WHEN 'RangeS_S' THEN 'Shared Range S'
WHEN 'RangeS_U' THEN 'Shared Range U'
WHEN 'RangeI_N' THEN 'Insert Range'
WHEN 'RangeI_S' THEN 'Insert Range S'
WHEN 'RangeI_U' THEN 'Insert Range U'
WHEN 'RangeI_X' THEN 'Insert Range X'
WHEN 'RangeX_S' THEN 'Exclusive range S'
WHEN 'RangeX_U' THEN 'Exclusive range U'
WHEN 'RangeX_X' THEN 'Exclusive range X'
WHEN 'SCH-M' THEN 'Schema-Modification'
WHEN 'SCH-S' THEN 'Schema-Stability'
ELSE NULL
END AS REQUEST_LOCK_MODE
FROM sys.dm_tran_locks AS L
join sys.partitions AS P
on L.resource_associated_entity_id = p.hobt_id
REF:http://sqlblog.foxraven.com/2012/01/check-to-see-if-table-is-locked.html
并加入:WHERE p.object_id = OBJECT_ID('foo')' –
有几种方法来检查什么挡住了查询。最简单的方法是启动内置的Activity Monitor。
一个同样简单的方法就是看在sys.dm_exec_requests
,并期待在wait_type
,wait_time
,wait_resource
和blocking_session_id
列被阻止查询(使用session_id
识别它)。
对于更复杂,但更丰富的方式手表How to Use sp_WhoIsActive to Find Slow SQL Server Queries。
'exec sp_lock exec sp_who2' – usr
只有一个注释 - 尝试从foo(无锁)。如果运行得更快,那可能是一个锁。 – Paparazzi