Dostrajanie wydajności czyszczenia danych tabeli w programie SQL Server 2016

Aug 15 2020

Muszę zautomatyzować czyszczenie ogromnej ilości danych z głównej tabeli do archiwum.

Kroki, które wykonuję:

  1. Wstawiam dane z tabeli głównej do tabeli archiwum.

  2. Po krzyżowej weryfikacji liczby w obu tabelach, usunięcie danych z tabeli głównej.

Ryzyko: instrukcja usuwania może zostać zawieszona, a baza danych przejdzie w tryb odzyskiwania.

Uwaga : nie możemy wykonać żadnej operacji DDL na głównej tabeli, ponieważ jest to tabela transakcji na żywo. Możemy iść z DML.

  • Baza danych: SQL Server 2016
  • System operacyjny: Windows i IIS

Odpowiedzi

4 MTay Aug 15 2020 at 15:58

DDL jest jednym z głównych sposobów na przyspieszenie usuwania rekordów, ale widząc, że DDL nie jest opcją i masz do czynienia z „stanami zawieszenia” instrukcji usuwania, być może proponuję przyjrzeć się usuwaniu rekordów w partiach?

Zobacz link , a oto przykład zapytania oparty na linku:

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

W takim przypadku, kiedy usuwamy według daty, upewnij się, że masz indeks w dniu, aby SQL Server mógł szybko pobrać tylko te wiersze. Będziesz chciał uniknąć blokowania na poziomie tabeli.