Saltar al contenido principal
Si se producen interbloqueos en la base de datos SQL mientras utiliza el programa, habilite el registro de información sobre interbloqueos. Para ello, utilice el sistema Extended Events. Creación de una sesión de XEvents mediante el asistente de SQL Server Management Studio:
  1. Inicie el Asistente para nueva sesión desde Object Explorer Management/Extended Events/Sessions:
  1. Especifique un nombre para la sesión. Seleccione la opción Start the event session at server startup si desea iniciarla al arrancar el servidor:
  1. En la sección Select Events To Capture, busque “xml_deadlock_report”:
  1. En la sección Specify Session Data Storage, especifique la ruta donde se almacenará el archivo que contiene los resultados registrados de la sesión. La opción Enable file rollover habilita la rotación automática en el directorio especificado.
  2. En la sección Summary, puede abrir y guardar en T-SQL los resultados de la sesión del asistente.

Consultar información sobre interbloqueos

  • Ver información sobre interbloqueos mediante la sesión XEvents Para leer archivos .xel, SQL Server dispone del componente DMF sys.fn_xe_file_target_read_file. Ejecute la siguiente consulta en SQL Server Management Studio y especifique la ruta de los archivos de seguimiento: select xdata.value(’(/event/data/value/deadlock/process-list/process/@lasttranstarted)[1]’,‘datetime’ ) as lasttranstarted ,xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@objectname)[1]’ ,‘nvarchar(max)’) as objectname ,xdata.value(’(/event/data/value/deadlock/process-list/process/@clientapp)[1]’ ,‘nvarchar(256)’) as client_app ,xdata.value(’(/event/data/value/deadlock/process-list/process/@hostname)[1]’ ,‘nvarchar(256)’) as hostname ,xdata.value(’(/event/data/value/deadlock/process-list/process/@loginname)[1]’ ,‘nvarchar(256)’) as loginname ,xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@indexname)[1]’ ,‘nvarchar(256)’) as indexname ,xdata.value(’(/event/data/value/deadlock/process-list/process/@waittime)[1]’ ,‘int’ ) as waittime ,xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@mode)[1]’ ,‘nvarchar(10)’ ) as lockmode ,xdata.query(’(/event/data/value/deadlock)[1]’) as deadlock_graphfrom sys.fn_xe_file_target_read_file(‘D:\MSSQL\XE\deadlocks\deadlocks.xel’,null,null,null) as f — comodín (deadlocks*.xel)cross apply (select cast(f.event_data as xml)) as e(xdata);
  • Ver información sobre interbloqueos mediante la sesión system_health Si el registro de interbloqueos no está habilitado, puede ver información sobre ellos mediante una sesión que siempre está habilitada de forma predeterminada (system_health). Para ello, ejecute la siguiente consulta en SQL Server Management Studio: select e.xdata.value(’(/event/data/value/deadlock/process-list/process/@lasttranstarted)[1]’,‘datetime’ ) as lasttranstarted ,e.xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@objectname)[1]’ ,‘nvarchar(max)’) as objectname ,e.xdata.value(’(/event/data/value/deadlock/process-list/process/@clientapp)[1]’ ,‘nvarchar(256)’) as client_app ,e.xdata.value(’(/event/data/value/deadlock/process-list/process/@hostname)[1]’ ,‘nvarchar(256)’) as hostname ,e.xdata.value(’(/event/data/value/deadlock/process-list/process/@loginname)[1]’ ,‘nvarchar(256)’) as loginname ,e.xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@indexname)[1]’ ,‘nvarchar(256)’) as indexname ,e.xdata.value(’(/event/data/value/deadlock/process-list/process/@waittime)[1]’ ,‘int’ ) as waittime ,e.xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@mode)[1]’ ,‘nvarchar(10)’ ) as lockmode ,e.xdata.query(’(/event/data/value/deadlock)[1]’) as deadlock_graphfrom sys.fn_xe_file_target_read_file(‘system_health*.xel’,null,null,null) as fcross apply (select cast(f.event_data as xml)) as e(xdata)where object_name = N’xml_deadlock_report’;
  • Ver información sobre interbloqueos en Azure Azure tiene una sesión independiente que, de forma predeterminada, se recopila en Blob Storage. Para verla, use la consulta de ejemplo a continuación (la consulta debe ejecutarse con el contexto master): select f.file_name ,xdata.value(’(/event/data/value/deadlock/process-list/process/@lasttranstarted)[1]’,‘datetime’ ) as lasttranstarted ,xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@objectname)[1]’ ,‘nvarchar(max)’) as objectname ,xdata.value(’(/event/data/value/deadlock/process-list/process/@clientapp)[1]’ ,‘nvarchar(256)’) as client_app ,xdata.value(’(/event/data/value/deadlock/process-list/process/@hostname)[1]’ ,‘nvarchar(256)’) as hostname ,xdata.value(’(/event/data/value/deadlock/process-list/process/@loginname)[1]’ ,‘nvarchar(256)’) as loginname ,xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@indexname)[1]’ ,‘nvarchar(256)’) as indexname ,xdata.value(’(/event/data/value/deadlock/process-list/process/@waittime)[1]’ ,‘int’ ) as waittime ,xdata.value(’(/event/data/value/deadlock/resource-list/keylock/@mode)[1]’ ,‘nvarchar(10)’ ) as lockmode ,xdata.query(’(/event/data/value/deadlock)[1]’) as deadlock_graphfrom sys.fn_xe_telemetry_blob_target_read_file(‘dl’, null, null, null) as fcross apply (select cast(f.event_data as xml)) as e(xdata);
Póngase en contacto con el servicio de soporte técnico y proporcione la información sobre el interbloqueo obtenida al ejecutar la consulta.