一、總結
1.網址
https://docs.microsoft.com/zh-cn/sql/relational-databases/system-stored-procedures/sp-lock-transact-sql?redirectedfrom=MSDN&view=sql-server-2017(sp_lock)
https://docs.microsoft.com/zh-cn/sql/relational-databases/system-dynamic-management-views/sys-dm-tran-locks-transact-sql?view=sql-server-2017(sys.dm_tran_locks)
2.查出結果具體含義參考官方文檔。
3.每個鎖會占用96字節的內存,如果有大量的小粒度鎖,則會占據大量的內存。
二、用到的SQL
1.根據object_id查看對象名稱
命令:select OBJECT_NAME(245575913)
SELECT OBJECT_ID('run.dbo.T1')
2.查詢所有的鎖
命令:exec sp_lock
Type值的選項含義:
KEY:索引內保護可串行事務中一系列鍵的鎖
PAG:數據頁或索引頁的鎖
EXT:對某區的鎖
3.查詢指定進程的鎖
命令:exec sp_lock 55
4.根據系統視圖查詢指定進程的鎖
命令:select * from sys.dm_tran_locks where request_session_id=55
5.顯示某個庫的鎖信息,參數是dbid
命令:SELECT resource_type, resource_associated_entity_id,
request_status, request_mode,request_session_id,
resource_description
FROM sys.dm_tran_locks
WHERE resource_database_id = 5
6.顯示阻塞信息
命令:SELECT
t1.resource_type,
t1.resource_database_id,
t1.resource_associated_entity_id,
t1.request_mode,
t1.request_session_id,
t2.blocking_session_id
FROM sys.dm_tran_locks as t1
INNER JOIN sys.dm_os_waiting_tasks as t2
ON t1.lock_owner_address = t2.resource_address;