Sembra che l'informazione desiderata non venga catturata da questo evento.
Si può vedere quali sono disponibili i campi per un evento con:
select p.name package_name, o.name event_name, c.name event_field, c.type_name field_type, c.column_type column_type
from sys.dm_xe_objects o
join sys.dm_xe_packages p
on o.package_guid = p.guid
join sys.dm_xe_object_columns c
on o.name = c.object_name
where o.object_type = 'event'
AND o.name = 'locks_lock_timeouts_greater_than_0'
order by package_name, event_name
il risultato è:
sqlserver locks_lock_timeouts_greater_than_0 ID uint16 readonly
sqlserver locks_lock_timeouts_greater_than_0 UUID guid_ptr readonly
sqlserver locks_lock_timeouts_greater_than_0 VERSION uint8 readonly
sqlserver locks_lock_timeouts_greater_than_0 CHANNEL etw_channel readonly
sqlserver locks_lock_timeouts_greater_than_0 KEYWORD keyword_map readonly
sqlserver locks_lock_timeouts_greater_than_0 count uint64 data
sqlserver locks_lock_timeouts_greater_than_0 lock_type uint64 data
Tuttavia, in SQL 2012 questo evento è stato sostituito (http://msdn.microsoft.com/en-us/library/ms144262.aspx) di lock_timeout_greater_than_0 che ha il seguente set di campi
sqlserver lock_timeout_greater_than_0 UUID guid_ptr readonly
sqlserver lock_timeout_greater_than_0 VERSION uint8 readonly
sqlserver lock_timeout_greater_than_0 CHANNEL etw_channel readonly
sqlserver lock_timeout_greater_than_0 KEYWORD keyword_map readonly
sqlserver lock_timeout_greater_than_0 collect_resource_description boolean customizable
sqlserver lock_timeout_greater_than_0 collect_database_name boolean customizable
sqlserver lock_timeout_greater_than_0 resource_type lock_resource_type data
sqlserver lock_timeout_greater_than_0 mode lock_mode data
sqlserver lock_timeout_greater_than_0 owner_type lock_owner_type data
sqlserver lock_timeout_greater_than_0 transaction_id int64 data
sqlserver lock_timeout_greater_than_0 database_id uint32 data
sqlserver lock_timeout_greater_than_0 lockspace_workspace_id ptr data
sqlserver lock_timeout_greater_than_0 lockspace_sub_id uint32 data
sqlserver lock_timeout_greater_than_0 lockspace_nest_id uint32 data
sqlserver lock_timeout_greater_than_0 resource_0 uint32 data
sqlserver lock_timeout_greater_than_0 resource_1 uint32 data
sqlserver lock_timeout_greater_than_0 resource_2 uint32 data
sqlserver lock_timeout_greater_than_0 object_id int32 data
sqlserver lock_timeout_greater_than_0 associated_object_id uint64 data
sqlserver lock_timeout_greater_than_0 duration uint64 data
sqlserver lock_timeout_greater_than_0 resource_description unicode_string data
sqlserver lock_timeout_greater_than_0 database_name unicode_string data
Da questo ero abl e per ricavare il database (database_id) e nella mia tabella case (variamente in object_id, associated_object_id, resource_0) dai loro Ids.
non ho visto un modo ovvio per trovare chi stava chiudendo l'oggetto dai dati acquisiti da questo evento.
EDIT - vedere SQL Server Lock Timeout Exceeded Deleting Records in a Loop per un esempio di utilizzo sp_lock e sp_who2 per eseguire il debug la causa di un evento di timeout di blocco.
+1 Grazie per le informazioni sulle modifiche in SQL Server 2012. Sfortunatamente, ho bisogno di queste informazioni su SQL Server 2008. Forse qualcun altro troverà una soluzione alternativa per SQL Server 2008. –
Perché hai impostato un timeout di blocco, normalmente aspetterà una quantità illimitata di tempo se non c'è un deadlock? – bkr
L'applicazione ha un'interfaccia utente. –