Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Die zusammengesetzte t-SQL-Anweisung verursacht den Deadlock. Haben Sie eine Idee, warum?

Sie müssen entweder mehr oder weniger Sperren halten.

Die einfachste Antwort ist entweder NOLOCK (beste Leistung) oder TABLOCKX (Konsistenz ohne nachdenken zu müssen).

Wenn Sie with (nolock) nicht verwenden können Aufgrund von Konsistenzanforderungen können Sie with (tablockx) hinzufügen . Dies bedeutet effektiv, dass immer nur ein Thread ähnliche Anweisungen gleichzeitig ausführen kann - es gibt keine Parallelität.

Die Alternative besteht darin, Ihre Anforderungen viel detaillierter zu analysieren, was nicht möglich ist, ohne zu verstehen, warum Sie die Tabelle aktualisieren, wofür die Daten verwendet werden usw.

Muss diese Aussage beispielsweise wirklich in der Transaktion enthalten sein? Es riecht nach Haushaltsführung:

  DELETE FROM [dbo].[t_Log_2] 
  WHERE [idtm]<'2011-03-12 08:41:57';

Wenn Sie das aus der Transaktion herausnehmen und in einen separaten Stapel legen, werden Sie möglicherweise feststellen, dass die Probleme verschwinden.