12 Stimmen

Wie erkenne ich einen Deadlock in SQL Azure?

Ich habe eine Windows Azure-Rolle, die aus zwei Instanzen besteht. Gelegentlich schlägt eine Transaktion mit einer SqlException mit folgendem Text fehl

Die Transaktion (Prozess-ID N) wurde auf Lock-Ressourcen mit einem anderen Prozess blockiert und als Opfer des Deadlocks ausgewählt. Führen Sie die Transaktion erneut aus.

Jetzt habe ich eine Weile lang gegoogelt und diesen Beitrag über die Identifizierung von Deadlocks mithilfe von SQL Server-Protokollen gelesen.

Das Problem ist...

Wie mache ich das in SQL Azure? Welche Tools verwende ich, um auf die Interna von SQL Azure zuzugreifen und genügend Daten zu erhalten?

5voto

Igorek Punkte 15586

Das Monitoring von SQL Azure ist eingeschränkter als bei SQL Server, aber die Tools werden zunehmend verfügbar, um einen näheren Blick darauf zu werfen:

http://social.technet.microsoft.com/wiki/contents/articles/troubleshoot-and-optimize-queries-with-sql-azure.aspx

5voto

Dhanuka777 Punkte 7835

Führen Sie die folgende Abfrage auf der Datenbank "Master" in der SQL Azure db aus,

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

Es gab ein Leistungsproblem mit dieser Abfrage, falls sie abläuft, versuchen Sie bitte Folgendes,

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('dl', NULL, NULL, NULL)
WHERE object_name = 'database_xml_deadlock_report'

Die zweite Abfrage enthält Daten im XML-Format, die sich auf die ausgeführten Prozesse beziehen. Viel Erfolg!

2voto

shueybubbles Punkte 21

Jetzt unterstützt Azure SQL-Datenbank zwei Möglichkeiten, Deadlock-XML-Berichte zu erhalten. Du kannst eine db-scoped XE-Sitzung mit dem database_xml_deadlock_report-Ereignis erstellen, um sie selbst zu verfolgen, oder du kannst den sys.fn_xe_telemetry_blob_target_read_file-Aufruf aus der vorherigen Antwort ändern, um 'dl' anstelle von 'el' zu verwenden. Deadlocks werden jetzt in eine eigene Datei umgeleitet, anstatt mit Login-Ereignissen vermischt zu werden.

Dieser MSDN-Artikel enthält die neuesten Informationen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X