Dostrajanie wydajności czyszczenia danych tabeli w programie SQL Server 2016
Muszę zautomatyzować czyszczenie ogromnej ilości danych z głównej tabeli do archiwum.
Kroki, które wykonuję:
Wstawiam dane z tabeli głównej do tabeli archiwum.
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
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.