無論出於何種原因,數據庫中的一個特定表開始不能在特定表上完成任何查詢結果。它說'執行查詢...'並沒有完成。如何檢查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