8

Tengo una función de Windows Azure que consta de dos instancias. De vez en cuando una transacción fallará con un SqlException con el siguiente texto¿Cómo identifico un interbloqueo en SQL Azure?

transacción (ID de proceso N) quedó en interbloqueo en recursos de bloqueo con otro proceso y ha sido elegido como víctima del interbloqueo. Vuelva a ejecutar la transacción.

Ahora he buscado en Google por un tiempo y leo this post para identificar interbloqueos utilizando los registros de SQL Server.

El problema es ...

¿Cómo lo hago en SQL Azure? ¿Qué herramientas utilizo para acceder a las partes internas de SQL Azure y obtener datos suficientes?

+0

Si no puede encontrar una respuesta aceptable aquí, no dude en ponerse en contacto con Microsoft directamente. Microsoft está aportando una gran cantidad de recursos a Azure y el apoyo que le están dando a los desarrolladores de Azure desde que asumió el señor Guthrie es bastante impresionante. Si eso falla, me mantendré atento a este hilo y dirigiré a los MVP de Azure a quienes conozco para que respondan este hilo, ya que me gustaría saber la respuesta yo mismo. – JSWork

Respuesta

2

Ejecutar la siguiente consulta en la base de datos "Maestro" en SQL Azure db ,

select * from sys.event_log where event_type='deadlock' and database_name='<Databasename>'; 

No era un problema de rendimiento con esta consulta, si se queda tiempo de espera después de intentarlo,

SELECT * 
,CAST(event_data AS XML).value('(/event/@timestamp)[1]', 'datetime2') AS TIMESTAMP 
, CAST(event_data AS XML).value('(/event/data[@name="error"]/value)[1]', 'INT') AS error 
,CAST(event_data AS XML).value('(/event/data[@name="state"]/value)[1]', 'INT') AS STATE 
,CAST(event_data AS XML).value('(/event/data[@name="is_success"]/value)[1]', 'bit') AS is_success 
,CAST(event_data AS XML).value('(/event/data[@name="database_name"]/value)[1]', 'sysname') AS database_name 
FROM sys.fn_xe_telemetry_blob_target_read_file('el', NULL, NULL, NULL) 
WHERE object_name = 'database_xml_deadlock_report' 

Ambas consultas tienen datos detallados en formato XML relacionados con los procesos que se están ejecutando. ¡Buena suerte!

+0

No creo que ninguna de estas consultas funcione en v12. Para mí, la primera consulta de sys.event_log devuelve filas, pero no XML. En la misma base de datos, la segunda consulta no devuelve filas. – yowl00

0

Ahora la base de datos SQL de Azure admite dos formas de obtener informes de interbloqueo xml. Puede crear una sesión XE de ámbito db con el evento database_xml_deadlock_report para rastrearlas usted mismo, o puede modificar la llamada sys.fn_xe_telemetry_blob_target_read_file de la respuesta anterior para usar 'dl' en lugar de 'el'. Los interbloqueos ahora se enrutan a su propio archivo en lugar de mezclarse con los eventos de inicio de sesión.

Este MSDN article tiene la información más reciente.