It is relatively simple to establish what has caused a deadlock in one of your database objects. All you need know is how to manipulate the built in System databases in order to get the appropriate information.
It is relatively simple to establish what has caused a deadlock in one of your database objects. All you need to do is to know how to manipulate the built in System databases in order to get the appropriate information.
The following Query:
SELECT SysTL.request_session_id,
DB_NAME(SysTL.resource_database_id),
SysO.Name,
SysP.object_id,
SysTL.resource_type,
SysTL.request_mode,
SysSQLT.text,
SysES.login_name,
SysES.host_name,
SysST.is_user_transaction,
SysAT.name,
SysCN.auth_scheme
FROM sys.dm_tran_locks SysTL
JOIN sys.partitions SysP ON SysP.hobt_id = SysTL.resource_associated_entity_id
JOIN sys.objects SysO ON SysO.object_id = SysP.object_id
JOIN sys.dm_exec_sessions SysES ON SysES.session_id = SysTL.request_session_id
JOIN sys.dm_tran_session_transactions SysST ON SysES.session_id = SysST.session_id
JOIN sys.dm_tran_active_transactions SysAT ON SysST.transaction_id = SysAT.transaction_id
JOIN sys.dm_exec_connections SysCN ON SysCN.session_id = SysES.session_id
CROSS APPLY sys.dm_exec_sql_text(SysCN.most_recent_sql_handle) AS SysSQLT
WHERE resource_database_id = db_id()
ORDER BY L.request_session_id
Determines which user has caused the lock, on what object is the lock, as well as all associated transactions in the current query’s feed — even the SQL text that is busy executing