8

Ho un ruolo di Windows Azure che consiste di due istanze. Di tanto in tanto una transazione non verrà effettuata con un SqlException con il seguente testoCome identificare un deadlock in SQL Azure?

transazione (Process ID N) critico sulle risorse di blocco con un altro processo ed è stata scelta come vittima del deadlock. Rieseguire la transazione.

Ora ho cercato su Google per un po 'e ho letto this post sull'identificazione dei deadlock utilizzando i log di SQL Server.

Il problema è ...

Come faccio lo faccio in SQL Azure? Quali strumenti utilizzare per accedere ai componenti interni di SQL Azure e ottenere dati sufficienti?

+0

Se non riesci a trovare una risposta accettabile, non esitare a contattare direttamente Microsoft. Microsoft sta investendo molte risorse in Azure e il supporto che stanno dando agli sviluppatori di Azure da quando Guthrie ha preso il comando è piuttosto impressionante. In caso contrario, terrò d'occhio questo thread e dirigerò gli MVP di Azure che conosco per rispondere a questo thread, poiché mi piacerebbe conoscere la risposta da solo. – JSWork

risposta

2

eseguire la seguente query sul database "master" in SQL Azure db ,

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

C'è stato un problema di prestazioni con questa query, se viene timeout prova a seguire,

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' 

Entrambe queste query contengono dati dettagliati in formato XML relativi ai processi in esecuzione. In bocca al lupo!

+0

Non penso che nessuna di queste query funzioni nella v12. Per me la prima query di sys.event_log restituisce righe, ma non XML. Nello stesso database la seconda query non restituisce alcuna riga. – yowl00

0

Ora il database SQL di Azure supporta due modi per ottenere rapporti xml deadlock. È possibile creare una sessione XE con ambito db con l'evento database_xml_deadlock_report per tracciarli da soli, oppure è possibile modificare la chiamata sys.fn_xe_telemetry_blob_target_read_file dalla risposta precedente per utilizzare 'dl' anziché 'el'. I deadlock ora sono indirizzati al proprio file invece di essere mescolati con gli eventi di accesso.

Questo MSDN article ha le informazioni più recenti.