2017-01-04 5 views
0

Mein geplanter Job funktioniert 6 mal an einem Tag. Manchmal ist es die Ursache für Deadlock. Ich habe versucht herauszufinden, wessen Block meine Sitzung blockiert.SQL Server Deadlock

Ich suchte und ich entdeckte Sql Profiler, aber es zeigt nicht genaues Ergebnis. Wie kann man Historisch mit T-SQL oder auf andere Weise identifizieren?

Wenn die Fail Job Fehlermeldung belown,

gezeigt

Transaktion (Prozess-ID) wurde mit einem anderen Prozess auf Sperre Ressourcen Deadlocks und ist als Deadlock-Opfer ausgewählt. Führen Sie die Transaktion erneut aus.

Antwort

0

Diese Deadlock Opfer oder Ursachen von Deadlocks identifizieren helfen sollte: https://ask.sqlservercentral.com/questions/5982/how-can-i-identify-all-processes-involved-in-a-dea.html

Wenn Sie das Risiko Ihres Prozesses hier Deadlocks reduzieren wollen, sind einige Strategien ...

  • Versuchen Sie, INSERT/UPDATE/DELETE Tabellen in der gleichen Reihenfolge. Z.B. wenn ein Prozess dies tut:

    BEGIN TRAN; UPDATE TableA; UPDATE TableB; COMMIT; 
    

während ein anderer Prozess dies tut:

BEGIN TRAN; UPDATE TableB; UPDATE TableA; COMMIT; 

besteht das Risiko, dass ein Prozess das andere Deadlock wird. Je größer die Zeit ist, desto höher das Risiko von Deadlocks. SQL Server wählt einfach zufällig einen Prozess als "Deadlock Victim" aus.

  • Versuchen Sie, den Code in einer Transaktion zu minimieren. I.e. Weniger Zeilen mit INSERT/UPDATE/DELETE-Code zwischen Ihren BEGIN TRANSACTION- und COMMIT TRANSACTION-Anweisungen
  • Verarbeiten Sie nach Möglichkeit kleinere Datenmengen. Wenn Sie eine große Anzahl von Zeilen verarbeiten, versuchen Sie, eine Stapelverarbeitung hinzuzufügen, sodass der Code zu einem beliebigen Zeitpunkt kleinere Datenmengen sperrt.
+0

Dank für die Erklärung Nick. Haben Sie einen guten Tag. – Oracsql

+0

Gern geschehen! –