detail blocking query
DESCRIPTION
kgkhljj;pj;pTRANSCRIPT
-- get the info from requests including the statement select [statement] = SUBSTRING(t.text, (r.statement_start_offset/2) + 1, case r.statement_end_offset when -1 then datalength(t.text) else (r.statement_end_offset - r.statement_start_offset)/2 end),*into #row_blocked_sessionsfrom sys.dm_exec_requests r cross apply sys.dm_exec_sql_text(sql_handle) t where status = 'SUSPENDED' and (wait_resource like 'KEY:%' or wait_resource like 'RID:%') -- get the info on the blocked processes to build the statement select l.request_session_id, l.resource_associated_entity_id, l.resource_description, l.resource_database_id, s.statementinto #blocked_infofrom sys.dm_tran_locks l join #row_blocked_sessions s on l.request_session_id = s.session_id where l.resource_type in ('RID', 'KEY') -- begin getting the rows for each statement: declare crs cursor for select request_session_id, resource_associated_entity_id, resource_description, resource_database_id, [statement] from #blocked_info declare @request_session_id intdeclare @resource_associated_entity_id bigintdeclare @resource_description nvarchar(100)declare @resource_database_id intdeclare @statement nvarchar(max)declare @exec nvarchar(max)declare @dbname sysnamedeclare @schema_name sysnamedeclare @object_name sysnamedeclare @index_id int open crsfetch next from crs into @request_session_id, @resource_associated_entity_id, @resource_description, @resource_database_id, @statement while @@FETCH_STATUS = 0begin -- get the database name: select @dbname = DB_NAME(@resource_database_id) select @schema_name = SCHEMA_NAME(o.schema_id), @object_name = o.name, @index_id = p.index_id from sys.partitions p join sys.objects o on o.object_id = p.object_id where p.partition_id = @resource_associated_entity_id or p.hobt_id = @resource_associated_entity_id -- print the information about the row: select @request_session_id as session_id, @resource_associated_entity_id as resource_associated_entity_id , @resource_description as resource_description, DB_NAME(@resource_database_id) as [database] , '[' + @schema_name + '].[' + @object_name + ']' as [object], @statement as [statement] -- create the statement to get the row: set @exec = N'select * from [' + @dbname + N'].[' + @schema_name + N'].[' + @object_name + N'] with (nolock, index (' + CAST (@index_id as varchar) + N')) ' + N' where %%lockres%% = ''' + @resource_description + N'''' exec sp_executesql @exec fetch next from crs into @request_session_id, @resource_associated_entity_id, @resource_description, @resource_database_id, @statement end -- clean upclose crsdeallocate crsdrop table #blocked_infodrop table #row_blocked_sessions