Leistungsoptimierung beim Bereinigen von Tabellendaten in SQL Server 2016

Aug 15 2020

Ich muss das Löschen großer Datenmengen aus der Haupttabelle in das Archiv automatisieren.

Schritte, denen ich folge:

  1. Ich füge die Daten aus der Haupttabelle in die Archivtabelle ein.

  2. Löschen Sie die Daten aus der Haupttabelle, nachdem Sie die Anzahl in beiden Tabellen überprüft haben.

Risiko: Die Löschanweisung kann hängen bleiben und die DB wechselt in den Wiederherstellungsmodus.

Hinweis : Wir können keine DDL-Operation für die Haupttabelle ausführen, da es sich um eine Live-Transaktionstabelle handelt. Wir können mit DML gehen.

  • Datenbank: SQL-Server 2016
  • Betriebssystem: Windows und IIS

Antworten

4 MTay Aug 15 2020 at 15:58

DDL ist eine der wichtigsten Methoden, um das Löschen von Datensätzen zu beschleunigen, aber da DDL keine Option ist und Sie bei Löschanweisungen mit „hängenden Zuständen“ konfrontiert sind, schlage ich vielleicht vor, Datensätze in Stapeln zu löschen?

Siehe link , und hier ist ein Abfragebeispiel basierend auf link:

DECLARE @Batch INT = 1000
WHILE 1 = 1
BEGIN
    DELETE TOP (@Batch)
    FROM MyTable
    WHERE Date < ‘20200401’';
    IF @@ROWCOUNT < @Batch BREAK
END

Stellen Sie in diesem Fall beim Löschen nach Date sicher, dass Sie einen Index für Date haben, damit SQL Server schnell nur diese Zeilen abrufen kann. Sie sollten das Sperren auf Tabellenebene vermeiden.